题目链接:https://leetcode.com/problems/swap-nodes-in-pairs/
解题思路:
这个题目比较复杂,我用本子写上去便于理解。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode swapPairs(ListNode head) { //若头结点为空,或链表只有一个节点,则返回head本身 if(head==null || head.next==null) return head; //若链表有两个及以上的节点时,关键在于修改两两节点间的next指针关系 ListNode newHead = new ListNode(0); //辅助节点 newHead.next = head; ListNode p1 = newHead; while(p1.next!=null && p1.next.next!=null) { //将辅助节点与要交换的两节点,在稿纸上画出每一步的指针改变时的断开与指向关系,可得下面的逻辑 ListNode temp1 = p1.next; ListNode temp2 = temp1.next; p1.next = p1.next.next;//这一步让p1指向temp2,链表指向要3个,不然就会断了 temp1.next = temp2.next; temp2.next = temp1; //交换完毕后,辅助节点向后走两位 p1 = p1.next.next; } return newHead.next; } }