leetcode hot 100

本文介绍了一种使用虚拟头节点的方法解决链表中两两交换节点的问题,通过临时节点保存节点并调整指针实现节点位置的改变,适用于链表操作的编程题目。
摘要由CSDN通过智能技术生成

两两交换链表中的节点

在这里插入图片描述
在本题中,我们需要注意,要交换的是链表的节点,而不是链表节点的值,所以我们需要对链表的节点进行操作,改变指针来达到移动节点的操作。

首先我们需要一个虚拟头节点,以此来保障不需要额外关注头节点。之后,我们想要交换虚拟头节点后一个和后后一个节点,那我们让虚拟头节点的指针直接指向它后后节点,但是,这时候我们会发现,我们再想指回头节点回不去了,所以需要指针来提前保存。
在这里插入图片描述
注意,我们要两两交换节点,那么我们只需要把cur指针移动到要交换的第一个节点之前就好!

通过cur.next和cur.next.next来进行操作。

个人理解在做链表类题目中,初始化的时候,左边是没有next的,而移动的时候,左边是右next的

class Solution {
  public ListNode swapPairs(ListNode head) {
        ListNode dumyhead = new ListNode(-1); // 设置一个虚拟头结点
        dumyhead.next = head; // 将虚拟头结点指向head,这样方便后面做删除操作
        ListNode cur = dumyhead;
        ListNode temp; // 临时节点,保存两个节点后面的节点
        ListNode firstnode; // 临时节点,保存两个节点之中的第一个节点
        ListNode secondnode; // 临时节点,保存两个节点之中的第二个节点
        while (cur.next != null && cur.next.next != null) {
            temp = cur.next.next.next;
            firstnode = cur.next;
            secondnode = cur.next.next;
            cur.next = secondnode;       // 步骤一
            secondnode.next = firstnode; // 步骤二
            firstnode.next = temp;      // 步骤三
            cur = firstnode; // cur移动,准备下一轮交换
        }
        return dumyhead.next;  
    }
}

来源:方法来源

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值