蓝桥杯入门即劝退(十九)两两交换链表

-----持续更新蓝桥杯入门系列算法实例--------

如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!

你的点赞、关注、评论、是我创作的动力!

-------希望我的文章对你有所帮助--------

一、题目描述

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

蓝桥杯入门即劝退(十九)两两交换链表_第1张图片

 

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

二、解题思路

  本题有较为简洁的递归写法,有兴趣可以去了解一下,由于本人尚未完全理解此题递归的精髓,因此使用常规解法来解题。

1、使用虚拟头节点,指向head头节点。

2、引入一个中间变量,用于临时存储下一组进行反转的节点。

3、引入First、Second节点,实现两个节点指向的反转。

4、将Second节点指向虚拟头节点,First节点指向Second节点。

5、再将First节点指向临时节点

6、重复以上步骤即可得到两两反转,最后返回即可。

蓝桥杯入门即劝退(十九)两两交换链表_第2张图片

 

三、代码

public ListNode swapPairs(ListNode head) {
        ListNode pHead = new ListNode(-1);
        pHead.next = head;
        ListNode temp;
        ListNode Fnode;
        ListNode Snode;
        ListNode cur = pHead;
        while (cur.next != null && cur.next.next != null) {
            temp = cur.next.next.next;
            Fnode = cur.next;
            Snode = cur.next.next;
            cur.next=Snode;
            Snode.next=Fnode;
            Fnode.next=temp;
            cur=Fnode;
        }
        return pHead.next;
    }

发文不易,恳请大佬们高抬贵手!


点赞:随手点赞是种美德,是大佬们对于本人创作的认可!


评论:往来无白丁,是你我交流的的开始!


收藏:愿君多采撷,是大佬们对在下的赞赏!

 

 

你可能感兴趣的:(决胜蓝桥杯,蓝桥杯,链表,java,算法)