24. Swap Nodes in Pairs

Medium

Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be changed.)

Example 1:

Input: head = [1,2,3,4]
Output:
 [2,1,4,3]

Example 2:

Input: head = []
Output:
 []

Example 3:

Input: head = [1]
Output:
 [1]

Constraints:

  • The number of nodes in the list is in the range [0, 100].

  • 0 <= Node.val <= 100

解題

Run time beat 100%、不需要做 Recursion,時間複雜度是O(n)的解法~

/**
 * 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 }
    header := head.Next
    
    fast, slow, pre := head.Next, head, head
    
    slow.Next = fast.Next
    fast.Next = slow
    
    for slow.Next!=nil && slow.Next.Next!=nil {
        pre = slow
        slow = slow.Next
        fast = fast.Next.Next.Next
        
        slow.Next = fast.Next
        fast.Next = slow
        pre.Next = fast
    }

    
    return header
}

Last updated