給定一個鏈表,兩兩交換其中相鄰的節點,並返回交換後的鏈表。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例:
給定 1->2->3->4, 你應該返回 2->1->4->3.
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){
return head;
}
//先交換前兩個
ListNode next = head.next;
//後續遍歷可能要用到的前置節點
ListNode pre = head;
//將head和next交換
head.next = next.next;
next.next = head;
head = next;
//當前節點是pre的next
ListNode cur = pre.next;
//後續要至少有兩個節點才需要遍歷
while(cur != null && cur.next != null){
//交換cur和next
next = cur.next;
pre.next = next;
cur.next = next.next;
next.next = cur;
//對於下一次遍歷,pre是當前交換後的後面的那個節點
pre = cur;
cur = pre.next;
}
return head;
}