代码重构: leetcode 24. 两两交换链表中的节点

122 阅读1分钟

24. 两两交换链表中的节点

很符合逻辑的写法,就是记录要交换两个节点之前的那个节点。

需要注意的点就是链表常见的空的问题,这题使用短路方式来判断,pre节点之后必须有两个节点才交换

 while (pre.next != null && pre.next.next != null) {}

做个谨慎的人,在写链表相关时候要注意别跳入空的陷阱

    public ListNode swapPairs(ListNode head) {
        ListNode pre0 = new ListNode(-1);
        pre0.next = head;
        ListNode pre = pre0;
        while (pre.next != null && pre.next.next != null) {
            ListNode n1 = pre.next;
            pre.next = n1.next;
            n1.next = pre.next.next;
            pre.next.next = n1;
            pre = pre.next.next;
        }
        return pre0.next;
    }