24.Swap Nodes in Pairs <两两交换链表>

题目链接: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;
        
    }
}
原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10830585.html