2025年- H28-Lc136- 24.两两交换链表中的节点(链表)---java版

发布于:2025-05-19 ⋅ 阅读:(22) ⋅ 点赞:(0)

1.题目描述

在这里插入图片描述

2.思路

cur指针要先放在虚拟头节点,才能去操作第一个数和第二个数
先判断偶数个节点,再判断奇数个节点,否则会犯空指针异常。
(1)如果节点是偶数个节点,只要满足curr.nextnull,就说明遍历结束了
(2)如果节点是奇数个节点,只要满足curr.next.next
null,说明遍历就结束了
(3)如果是0个节点。curr指向的是虚拟头节点,所以也满足curr.next=null
(4)在赋值操作之前,定义一个临时变量,保存节点1(curr.next)
(5)在赋值操作之前,也需要定义一个临时变量,保存节点3(curr.next.next.next)
(6)要交换节点3和节点4的时候,要把curr从节点1移动到节点3,所以就要执行curr=curr.next.next。
(7)最后返回链表的头节点
在这里插入图片描述

3.代码实现

class ListNode{
    int val;
    ListNode next;

    public ListNode() {
    }

    public ListNode(int val) {
        this.val = val;
    }

    public ListNode(int val,ListNode next) {
        this.val = val;
        this.next = next;
    }
}
public class H24 {

    public ListNode swapPairs(ListNode head) {
        //1.创建一个虚拟头节点
        ListNode dummyhead=new ListNode(0);
        dummyhead.next=head;
        //2.定义一个curr指针,curr==dummyhead,才能操作节点1和节点2
        ListNode curr=dummyhead;
        //3.while可以进行无限循环,终止条件就说偶数节点curr.next!=null才能交换,融合curr.next==null,说明已经到达最后一个节点
        //此处要&&,保证不会有空指针异常
        while(curr.next!=null&&curr.next.next!=null)
        {
            //4.在第五步赋值之前,创建两个临时变量保留节点1和节点3
            ListNode temp1=curr.next;
            ListNode temp3=curr.next.next.next;
            //5.虚拟头节点指向节点2(现在==过去)
            curr.next=curr.next.next;
            //6.节点2的指针指向节点1
            curr.next.next=temp1;
            //7.节点1(此时节点1是temp1)的指针指向节点3
            temp1.next =temp3;

            //8.将cur指针移动到交换后1的位置,因为此时要交换3和和4了(2-》1-》3-》4)
            curr=curr.next.next;
        }
        return dummyhead.next;//返回头节点

    }
    public static void main(String[] args)
    {
        H24 test=new H24();
        //创建1,2,3,4节点
        ListNode node4=new ListNode(4,null);
        ListNode node3=new ListNode(3,node4);
        ListNode node2=new ListNode(2,node3);
        ListNode head=new ListNode(1,node2);
        ListNode result = test.swapPairs(head);

        System.out.println("输出两两交换链表的结果:");

        while(result!=null)
        {
            System.out.print(+result.val);
            if (result.next!=null)
            {
                System.out.print("->");
            }
            result=result.next;
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到