leetcode刷題筆記328題 奇偶連結串列
阿新 • • 發佈:2020-12-15
leetcode刷題筆記328題 奇偶連結串列
地址:328. 奇偶連結串列
問題描述:
給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。
請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 O(1),時間複雜度應為 O(nodes),nodes 為節點總數。
示例 1:
輸入: 1->2->3->4->5->NULL
輸出: 1->3->5->2->4->NULL
示例 2:輸入: 2->1->3->5->6->4->7->NULL
輸出: 2->3->6->7->1->5->4->NULL
說明:應當保持奇數節點和偶數節點的相對順序。
連結串列的第一個節點視為奇數節點,第二個節點視為偶數節點,以此類推。
/** * Definition for singly-linked list. * class ListNode(_x: Int = 0, _next: ListNode = null) { * var next: ListNode = _next * var x: Int = _x * } */ object Solution { def oddEvenList(head: ListNode): ListNode = { if (head == null) return head var odd = head val evenHead = head.next var even = evenHead while (even != null && even.next != null) { odd.next = even.next odd = odd.next even.next = odd.next even = even.next } odd.next = evenHead return head } }
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func oddEvenList(head *ListNode) *ListNode { if head == nil {return head} odd := head even := head.Next evenHead := head.Next //分別構建奇數連結串列與偶數連結串列,將偶數連結串列掛在奇數連結串列後 for (even != nil && even.Next != nil){ odd.Next = even.Next odd = odd.Next even.Next = odd.Next even = even.Next } odd.Next = evenHead return head }