单链表相邻两个节点之间交换顺序

来源:互联网 发布:mac 远程控制 windows 编辑:程序博客网 时间:2024/05/16 17:43

思路
交换逻辑

  • 代码
/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode swapPairs(ListNode head) {       if (head == null || head.next == null) return head;       ListNode pre = head;       ListNode tail = new ListNode(0);       head = head.next;       ListNode curr = pre != null ? (pre.next != null ? pre.next : null) : null;       while (curr != null) {           tail.next = curr;           ListNode temp = curr.next;           curr.next = pre;           tail = pre;           pre.next = temp;           pre = temp;           curr = pre != null ? (pre.next != null ? pre.next : null) : null;       }       return head;    }}
  • 与逆序的实现有一定的相似性,但是又相对复杂
  • 两两看成一组, 若只有奇数个,则后面一个可以看成是一个空节点
  • 两个节点中的后一个节点指向前一个节点,前一个节点指向后一组节点的第一个节点,构成的新列表进行下一次的变换操作
  • tail指针指的是奇数节点,实现的功能是将前一组的后一个节点指向后一组的第二个节点

应该还有更好的方法去解决这个问题,后续更新

0 0