版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}