Leetcode 单链表反转

本文深入探讨了单链表反转的经典算法,介绍了一种利用三个指针(pre、cur、next)进行链表反转的有效方法。通过详细的代码示例,展示了如何在循环中更新指针,实现链表元素的有序反转,避免了常见的NULL指针错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表反转问题有很多好的处理方法,做题的时候看到一种很好的解决思路。

新建三个指针分别为 pre、cur、next 。

pre作为新建链表的头指针,cur作为当前待转移元素的指针,next作为除待转移元素以为,剩余元素的头指针

三个指针设置的很合理,分别对应有效的位置,避免丢掉链表的位置。其中next是在cur不为NULL这一条件成立才会创建。

如果采用循环外创建,循环内使用 next = next -> next  这样的方式更新指针。此时next达到NULL时,cur仍然满足循环条件,此时会造成 next指针为 NULL  时没有 next指针域造成的执行错误。

代码如下:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (head == NULL || head->next == NULL)
            return head;
        ListNode* pre = NULL; // 作为转换后的链表的头指针
        ListNode* cur = head; // 待转换的元素

        while(cur != NULL) {
            ListNode* next = cur->next; // 创建next指针
            cur->next = pre;            // 移动数,将新链表接到待移数的指针
            pre = cur;                  // 新链表头指针右移
            cur = next;                 // 待换数指针右移
        }
        return pre;
    }
};

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值