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

TomorrowWu發表於2019-02-16

題目描述

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

給定 1->2->3->4, 你應該返回 2->1->4->3.

說明:

  • 你的演算法只能使用常數的額外空間。
  • 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

程式碼實現

// ListNode Definition for singly-linked list.
type ListNode struct {
    Val  int
    Next *ListNode
}

func swapPairs(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }

    var prev *ListNode
    cur := head
    head = cur.Next
    for ; cur != nil && cur.Next != nil; cur = cur.Next {
        next := cur.Next
        //注意:第一次迴圈時,prev為nil
        if prev != nil {
            prev.Next = next
        }
        //交換兩個節點
        cur.Next, next.Next, prev = next.Next, cur, cur
    }

    return head
}

GitHub

  • 原始碼傳送門
  • 專案中會提供各種資料結構及演算法的Golang實現, LeetCode解題思路及答案
題目來源

leetcode 24. 兩兩交換連結串列中的節點

相關文章