飞道的博客

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

233人阅读  评论(0)

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

如果你也喜欢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、重复以上步骤即可得到两两反转,最后返回即可。

 

三、代码


  
  1. public ListNode swapPairs (ListNode head) {
  2. ListNode pHead = new ListNode(- 1);
  3. pHead.next = head;
  4. ListNode temp;
  5. ListNode Fnode;
  6. ListNode Snode;
  7. ListNode cur = pHead;
  8. while (cur.next != null && cur.next.next != null) {
  9. temp = cur.next.next.next;
  10. Fnode = cur.next;
  11. Snode = cur.next.next;
  12. cur.next=Snode;
  13. Snode.next=Fnode;
  14. Fnode.next=temp;
  15. cur=Fnode;
  16. }
  17. return pHead.next;
  18. }

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


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


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


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

 

 


转载:https://blog.csdn.net/m0_55278347/article/details/129171042
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场