反转链表

 题目:给你单链表的头节点 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){}
}

 

posted @ 2024-03-05 09:53  该说不唠  阅读(29)  评论(0)    收藏  举报