leetcode每日一练-第206题-反转链表

leetcode每日一练-第206题-反转链表_第1张图片

一、思路

迭代

二、解题方法

 以输入为 1 -> 2 -> 3 -> 4 -> 5 的链表为例

leetcode每日一练-第206题-反转链表_第2张图片

leetcode每日一练-第206题-反转链表_第3张图片

leetcode每日一练-第206题-反转链表_第4张图片

leetcode每日一练-第206题-反转链表_第5张图片

三、code

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* prev=nullptr;//反转后的链表
        ListNode* curr=head;//当前更新的原有链表
        while(curr)//原有链表无值时停止循环
        {
            ListNode* nextNode=curr->next;//定义 nextNode 是为了保存当前节点 curr 的下一个节点指针,防止在执行 curr->next = prev; 操作后,丢失对原链表后续节点的引用。
            curr->next=prev;//将curr的next指向prev,用来实现反转
            prev=curr;//记录每一轮反转的值
            curr=nextNode;//更新curr用于下一次操作

        }
        return prev;


    }
};

=========================================================================学到的知识:

使用prev和迭代建立一个新的链表,用来存储反转后的链表。

你可能感兴趣的:(c++)