1. 程式人生 > 其它 >LeetCode-024-兩兩交換連結串列中的節點

LeetCode-024-兩兩交換連結串列中的節點

兩兩交換連結串列中的節點

題目描述:給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:雙指標法
  • 首先,如果head為空或者head沒有後繼節點,直接返回head;

  • 然後用2個指標first和second分別指向第一個和第二個節點,new一個pre節點指向first,操作過程如下:

    • first的next指向second的next;

    • second的next指向first;

    • pre的next指向second;

    • 前面幾步就是把first和second的位置交換;

    • 然後pre指向first;

    • first指向first的next;

    • 然後進行下一次遍歷,條件是first不為空且first的next不為空,直到這個條件不成立,則遍歷結束。

    • 返回結果。

public class LeetCode_024 {
    public static ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = head.next;
        ListNode pre = new ListNode(-1), first = head, second;
        pre.next = head;
        while (first != null && first.next != null) {
            second = first.next;

            first.next = second.next;
            second.next = first;
            pre.next = second;

            pre = first;
            first = first.next;
        }

        return newHead;
    }

    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);
        head.next.next.next = new ListNode(4);
        head.next.next.next.next = new ListNode(5);

        ListNode result = swapPairs(head);
        while (result != null) {
            System.out.print(result.val + " ");
            result = result.next;
        }
    }
}

【每日寄語】 宇宙山河浪漫,生活點滴溫暖,都值得你我前進。