单链表基本操作---leetcode

本文详细介绍了如何使用双指针法实现单链表的反转。通过四个步骤,即保存后一个节点、翻转节点、前置节点后移、当前节点后移,可以成功地将链表反转。提供的代码示例清晰地展示了这一过程。

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

1.整个链表翻转

题目:
反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

1.1 算法思路

双指针:一个指针pre指向原链表当前节点的前一个节点,另一个指针next指向当前节点的下一个节点。

依次遍历链表的各个节点,每遍历一个节点即将其指向前一个节点(倒置),主要分4步:

1.先备份后一个节点(以防移动指针的时候找不到下一个节点):next = head.next;

2.当前节点的next指向前一个节点:head.next = pre;

3.前置节点后移一个位置到当前节点:pre = head;

4.当前节点后移一个位置到下一个节点:head = next,注意这一步(千万不要)容易忽略。

1.2 代码实现

// 节点
class Node{
    int val;
    Node pre;
    Node next;
}

     // 翻转整个链表
    public Node reverseLinkedList(Node head){
        // 头节点为空或则只有头节点时,返回头节点
        if(head == null || head.next == null){
            return head;
        }
        // 创建pre next,开始时,pre为null
        Node pre = null, next;

        while(head != null){
            // 保存当前节点的下一个节点
            next = head.next;
            // 翻转节点,使当前节点指向前一个节点
            head.next = pre;
            // 后移节点,使点一个节点移到当前节点
            pre = head;
            // 后移节点,使当前节点移到下一个节点
            head = next;
        }
        return pre;           // 注意:当pre指向原链表的最后一个节点时,head已经指向最后一个节点的Next即空节点,所以这里应返回pre
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

picacho_pkq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值