LeetCode -- 24. Swap Nodes in Pairs

题意及思路

题意:两个节点交换(并不是值交换,是节点的交换),并不是两两交换,如果有四个就交换前面那个,后面两个(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;
    }
}

猜你喜欢

转载自www.cnblogs.com/kyrie211/p/11226245.html