当前位置:   article > 正文

[数据结构与算法]给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。...

给定一个单链表,两两交换相邻的节点数据结构
给定 1->2->3->4, 你应该返回 2->1->4->3.

这个题目一看很简单,就是让后驱节点指向前驱节点,然后前驱节点指向后驱节点的后驱节点,但是后驱的节点也需要交换,所以有点棘手。
思路就是列举如下图
1 -> 2 -> X -> Y
| | |
left right aft
第一步: 初始化 preNode = right ,left,right , aft四个节点  指向
第二步: right.next = left, pre.next = right, pre = left;

1 <-> 2 X -> Y
         |           |    | 
       pre.next     left   right  aft
如果X = null, pre.next = null, 
如果X != null, Y = null, pre.next = X;
否则 Y -> X (Y.next = X), pre.next = Y, pre = X;
上代码
  1. public ListNode swapPairs(ListNode head) {
  2. //边界条件 如果没有/只有一个节点,直接返回
  3. if(head == null || head.next == null)
  4. return head;
  5. ListNode left = head, right = head.next, aft = right.next;
  6. ListNode preHead = new ListNode(-1);
  7. preHead.next = right;
  8. ListNode pre = new ListNode(-1);//前驱节点
  9. while(right != null){
  10. right.next = left;
  11. pre.next = right;
  12. pre = left;
  13. if(aft == null){
  14. pre.next = null;
  15. break;
  16. }
  17. left = aft;
  18. right = aft.next;
  19. if(right == null)
  20. {
  21. pre.next = left;
  22. }else{
  23. aft = right.next;
  24. }
  25. }
  26. return preHead.next;
  27. }

  思路就是

转载于:https://www.cnblogs.com/zhengwangzw/p/11462560.html

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

闽ICP备14008679号