算法通关村第二关——终于学会链表反转了

文章介绍了两种链表反转的方法:一是通过创建虚拟头结点辅助反转,二是直接操作链表节点进行反转。在虚拟头结点法中,建立一个新节点作为头结点,逐个将原链表节点接入新链表。而在直接操作法中,使用前驱和当前节点的概念,不断更新节点的next指针,实现链表反转。
摘要由CSDN通过智能技术生成

链表反转


1. 建立虚拟头结点辅助反转

我们可以建立虚拟结点ans,并令ans.next = head,这样可以很好的简化操作,然后我们每次从旧的链表拆下来一个结点接到ans后面就行了。如下图所示:

    // 虚拟头结点法 反转链表
    public static Node reverseList(Node head){
        Node ans = new Node(-1);
        Node cur = head;
        while(cur != null){
            //记录下当前结点的下一个结点,避免丢失
            Node next = cur.next;
            //将当前结点的下一个结点置为空,即切断原链表的那根线
            cur.next = ans.next;
            //将cur接入到新链表
            ans.next = cur;
            //操作完成cur向下走一步
            cur = next;
        }
        return ans.next;
    }

2. 直接操作链表实现反转

 

执行过程期间示意图:

    //一般方法反转链表
    public static Node reverse(Node head){
        Node prev = null;
        Node cur = head;
        while(cur != null){
            //将当前结点的下一个结点保存下来
            Node next = cur.next;
            //链表反转,设置当前链表的下一个结点为前结点
            cur.next = prev;
            //前结点等于现在结点 即前结点向后走一步
            prev = cur;
            //现在结点等于下一结点,即现在结点也向后走一步
            cur = next;
        }
        return prev;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值