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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


定位要交换的节点,交换逻辑,之后更新下一个要交换的开始节点。

    public ListNode swapPairs(ListNode head) {

        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;

        ListNode cur = head;
        // 需要一个前驱节点,因为交换,后一个节点之后第一个节点后,前驱要和后一个节点连接。
        ListNode prev = dummyHead;

        while(cur != null) {
            if(cur.next == null) {
                break;
            }
            ListNode node = cur;
            ListNode next = cur.next;
            // 下一个要交换的开始节点
            cur = cur.next.next;
            // 删除第二个节点
            node.next = cur;
            next.next = null;
            // 第二个节点执行第一个节点
            next.next = node;
            // 前驱指向插入的节点,成为链
            prev.next = next;

            // 最后一个步,更新前驱节点。
            prev = node;
        }
        return dummyHead.next;

    }
posted @ 2022-02-25 16:34  一颗青菜  阅读(5)  评论(0)    收藏  举报