题意及思路
题意:两个节点交换(并不是值交换,是节点的交换),并不是两两交换,如果有四个就交换前面那个,后面两个(emmm,自行理解,我的表达略显苍白)。
思路:维护三个指针变量,分别为first、p、q。其中first为核心节点,避免交换后,数据混乱。p、q分别为两个需要交换的节点。具体见代码。
附上思维图
代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode swapPairs(ListNode head) { if(head==null) return head; ListNode first,p,q,top = new ListNode(-1); top.next = head; first = top; p = top.next; q = p.next; while(p!=null && q!=null){ p.next = q.next; q.next = p; first.next = q; first = p; p = p.next; if(p==null) break; q = p.next; } return top.next; } }