题目描述
代码解决(思路1:双指针)
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode*temp;//保存cur下一个节点 ListNode*cur=head; ListNode*pre=NULL; while(cur) { temp=cur->next;// 保存一下 cur的下一个节点,因为接下来要改变cur->next cur->next=pre;//翻转 //更新pre和cur pre=cur; cur=temp; } return pre; } };
初始化三个指针
cur
、pre
和temp
,其中cur
指向链表的头节点,pre
初始化为NULL
,temp
用于保存cur
的下一个节点。使用一个
while
循环来遍历链表,循环的条件是cur
不为NULL
。在循环内部,首先使用
temp
保存cur
的下一个节点,因为接下来要改变cur
的指针域,指向pre
。将
cur
的指针域指向pre
,完成翻转。更新
pre
和cur
,将pre
指向cur
,cur
指向temp
。当
cur
为NULL
时,循环结束,此时pre
指向翻转后的链表的头节点,返回pre
。