题目描述
206.反转链表
反转一个单链表
示例1:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
题解
定义两个指针re1和re2,re1用来记录每次链表更新后的首地址,re2用来使后一个结点指向前一个结点;再定义一个指针re3,用来保存re2的下一个结点,防止结点发生丢失,就这样迭代的向下走即可。
初始情况:
①re1先指向NULL,表示它为最后一个结点,定义re3指针,保存re2的下一个结点,再让re2的next指向re1,再将re2赋值给re1,re3赋值给re2,这样就完成了一个反转的步骤。
②重复①的过程,直到re2的值为NULL,结束。
题解代码
struct ListNode* reverseList(struct ListNode* head){
if(head==NULL)
{
return head;
}
else if(head->next==NULL)
{
return head;
}
else{
//re2用来使第2(n)个结点指向第1(n-1)个结点
struct ListNode* re2 = head->next;
//re1用来记录每次链表更新后的首地址
struct ListNode* re1 = head;
//使第一个结点指向空,表示他为最后一个结点
re1->next = NULL;
while(re2){
//保存re2的下一个结点,防止结点发生丢失
struct ListNode* re3 = re2->next;
re2->next = re1;
re1 = re2;
re2 = re3;
}
return re1;
}
}