记录一下,C链表的反转

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011123091/article/details/82110148

给自己复习使用,如果谁不幸搜到,请无视。

如果忘记代码思路的时候,可以再推演一下图中的过程,需要三个指针,三个指针紧邻三个元素,每一次循环结束newfirst指向新链表的第一个元素,oldFirst指向旧链表的第一个,oldFirstNext指向旧链表的第一个的下一个。图中p ,q,r分别是上边说的三个指针。

 代码实现:

list * ReverseList(list * head)
{
	list* newfirst,*oldFirst,*oldFirstNext;
	//三个指针分别指向链表的顺序的三个元素
	 if(NULL==head|| NULL==head->next) return head;    //少于两个节点没有反转的必要。
	newfirst=head;
	oldFirst=head->next;
        head->next = NULL; //旧的头指针是新的尾指针,next需要指向NULL
	while(oldFirst)
	{
		oldFirstNext=oldFirst->next;
		oldFirst->next=newfirst;
		newfirst=oldFirst;
		oldFirst=oldFirstNext//每次循环结束就是,newfirst指向新链表的第一个,然后oldoldFirst
	//和oldFirstNext,指向旧链表的第一个
	}
	//因为newfirst为新反转以后的第一个,所以head指向
	head=newfirst;
	return head;
}

猜你喜欢

转载自blog.csdn.net/u011123091/article/details/82110148