#leetcode24.交换链表中的相邻节点


 

 这道题是让我们交换链表中的相邻的两个节点,最开始自己的思路很繁琐,就是先进行两两交换,然后进行跳跃连接??,后来发现两两交换一旦断掉之后就无法再找到后续的两两交换对了,所以这个方法行不通,后续我打算用队列将要跳跃连接的节点存储起来,然后一一出栈,然后进行连接,但是这种方式空间复杂度就不是O(1)了,所以还是参考了一下大佬的答案,整理代码在下面:

public ListNode swapPairs(ListNode head) {

      ListNode node = new ListNode(-1);
      node.next = head;
      ListNode pre = node;

      while(pre.next !=null && pre.next.next != null) {
          ListNode l1 = pre.next, l2 = pre.next.next;
          ListNode next = l2.next;

          pre.next = l2;
          l2.next = l1;
          l1.next = next;

          pre = l1;
      }
      return node.next;
    }

写的有点烂,凑合看,我自己考虑这道题的问题是没有构建起一个合理的有效的循环过程,而是总想着将这个问题分成2部来解决,第一步相邻交换,第二步进行连接!

而大佬的这个解题的思路通过新建一个-1的node节点直接抹平了后续所有节点的关系,这样就合理的构建出了循环过程;

同时,pre.next!=null && pre.next.next != null这个条件可以很好的避过后续只有一个节点而不发生交换的情况;