剑指offer 24. 反转链表
程序员文章站
2022-03-11 17:24:12
...
1.问题描述
输入一个链表的头结点,反转链表后,输出新链表的表头。
2. 解决思路
1)链表是空的:直接返回空的头结点;
2)链表中只有一个结点:直接返回原头结点;
3)链表中有大于2个以上的结点:需要三个指针来辅助
a)头结点的下一个结点为空结点NULL;
b)要对每个结点逐一遍历并反转,需要辅助指针node1来遍历;
c)由于需要改变每个结点的下一个结点,所以在改变方向之前需要保存它的下一个结点,使用node2;
d)node1和node2每次都需要更新,指向原来链表的下一个,但是它们指向的下一个已经发生了改变,所以需要临时的变量node3来辅助它们更新;是否更新就看node2是否到了最后一个。
e)返回node1即为新的链表表头。
3.代码实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* head) {
if(head == NULL || head->next == NULL)
return head;
ListNode* node1;
ListNode* node2;
node1 = head->next;
head->next = NULL;
node2 = node1->next;
node1->next = head;
while(node2 != NULL){
ListNode* node3 = node2->next;
node2->next = node1;
node1 = node2;
node2 = node3;
}
return node1;
}
};
上一篇: Tomcat6配置日志
下一篇: 【剑指offer】24.反转链表