当前位置:   article > 正文

详解两两交换链表中的节点_交换节点一和节点四

交换节点一和节点四

前言

LeetCode连接

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

什么是只进行节点交换,什么是值交换呢?

值交换:仅仅将链表中的val值进行交换

节点交换:是节点整个对象进行交换


学习 本节需要参考博主之前的关于节点创建的文章

一文读懂移除链表元素_abc123mma的博客-CSDN博客

一、链表节点交换

从LeetCode的题目中可以得出链表交换的交换也分为3部分

详细分析请参考:另一篇博文详解反转链表_abc123mma的博客-CSDN博客

基本分析如下:

  • 实例1就如前言中的图所示,链表中节点两两交换
  • 实例2就是头节点head 为null 直接返回null
  • 实例3是只有一个节点,即为头节点之间返回head即可

二、具体步骤

首先设置cur结点指向虚拟头结点;为了方便表示这里的虚拟头节点省略了。

按照指定顺序操作链表

【1】表示cur节点指向2节点

【2】表示1节点指向3节点

【3】表示2节点指向1节点

【操作链表后】

 【下一次循环前】:cur 要移动到节点1这个位置开始对节点3和4进行操作。

cur = cur.next.next;

【循环结束条件】:因为要保证两两交换,所以每次交换时候不能少于两个节点

  因此结束条件为:

cur.next != null && cur.next.next != null

1.当节点数是偶数时,cur.next==null时,循环终止。
2.当节点数是奇数时,因为最后一个节点不用交换,所以当cur.next.next==null时,循环终止

代码

  1. package link;
  2. import static link.ListNode.print;
  3. public class SwapLinkNode {
  4. public static void main(String[] args) {
  5. ListNode node1 = new ListNode(1);
  6. ListNode node2 = new ListNode(2);
  7. ListNode node3 = new ListNode(3);
  8. ListNode node4 = new ListNode(4);
  9. node1.next = node2;
  10. node2.next = node3;
  11. node3.next = node4;
  12. System.out.println("=========交换前=========");
  13. print(node1);
  14. ListNode node = swapPairs(node1);
  15. System.out.println("=========交换后=========");
  16. print(node);
  17. }
  18. public static ListNode swapPairs(ListNode head) {
  19. // 空节点
  20. if (head == null) {
  21. return null;
  22. }
  23. // 只有一个节点
  24. if (head.next == null) {
  25. return head;
  26. }
  27. ListNode dummy = new ListNode();
  28. dummy.next = head;
  29. ListNode cur = dummy;
  30. while (cur.next != null && cur.next.next != null) {
  31. ListNode temp = cur.next;
  32. // 步骤1
  33. cur.next = temp.next;
  34. // 步骤2
  35. ListNode temp2 = cur.next.next;
  36. cur.next.next = temp;
  37. // 步骤3
  38. temp.next = temp2;
  39. // 每次循环往后移动两个节点
  40. cur = cur.next.next;
  41. }
  42. return dummy.next;
  43. }
  44. }

结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码吟游诗人/article/detail/61293
推荐阅读
相关标签
  

闽ICP备14008679号