反转链表

题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
思路:第一步,首先定义一个空结点用来保存临时指针,然后定义一个前指针cur指向头结点,定义一个后指针指向NULL,
也就是头结点的前面一位。
第二步,循环检测前指针cur的值,直到该指针指向链表尾部,即为空时,反转结束。
第三步,开始移动双指针,首先保存头结点的下一个结点位置,然后反转前指针的指向,使其指向后指针。此时链表的头结点指向的是头结点的前一个结点,即NULL。
然后依次更新前、后指针的位置,向后移动一位,依次循环。
第四步,最后前指针cur指向NULL,后指针指向的是最后一个结点,而此时最后一个结点就变为了头结点,返回后指针pre即可。单链表反转完成。
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* temp; ListNode* cur=head; ListNode* pre=NULL; while(cur) { temp=cur->next; cur->next=pre; pre=cur; cur=temp; } return pre; } };
链表定义
struct ListNode{ int val; ListNode* next; ListNode(int x) : val(x),next(NULL){} }

浙公网安备 33010602011771号