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

一、链表反转的概念

首先说明一下什么是链表反转,如下图所示,给出一个A链表:a1,a2,a3。将它的结构变为如下B链表的样式:a3,a2,a1。这就是链表反转

二、链表反转的实现方式

这里总共介绍两种链表反转的实现方式

(1)使用虚拟节点(又名头盔法)

(2)直接操作链表来实现(又名穿针引线法)

方法1:虚拟节点法

如上图所示,对A节点遍历依次安置在虚拟节点的下一节点上。整个过程可以理解为链表的插入操作,被插入的链表是虚拟节点作为头指针作为头节点的链表,插入的链表就是A链表。所以首先就是学会链表的插入操作然后做这个就比较容易了。

代码:

public  static  ListNode reverseList(ListNode head){
        ListNode dummyNode = new ListNode(-1);
        ListNode curNode = head;
        while (curNode != null){
            ListNode temp = curNode.next;
            curNode.next=dummyNode.next;
            dummyNode.next=curNode;
            curNode=temp;
        }
        return dummyNode.next;
    }

方法二:直接操作链表实现

代码:

public static ListNode reverseList2(ListNode head){
        ListNode pre = null;
        ListNode cur = head;
        while (cur!=null){
            ListNode temp = cur.next;
            cur.next =pre;
            pre=cur;
            cur=temp;
        }
        return pre;
    }

这种方法不需要额外定义一个节点,遍历原链表,然后取出的每个节点的下一个节点指在pre节点上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值