-----持续更新蓝桥杯入门系列算法实例--------
如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!
你的点赞、关注、评论、是我创作的动力!
-------希望我的文章对你有所帮助--------
一、题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 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、重复以上步骤即可得到两两反转,最后返回即可。
三、代码
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;
}
发文不易,恳请大佬们高抬贵手!
点赞:随手点赞是种美德,是大佬们对于本人创作的认可!
评论:往来无白丁,是你我交流的的开始!
收藏:愿君多采撷,是大佬们对在下的赞赏!