From dba20afe12007f67e6848977d6903dcddbde4c83 Mon Sep 17 00:00:00 2001 From: YDZ Date: Mon, 1 Apr 2019 02:59:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20problem=20328?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../328. Odd Even Linked List.go | 32 +++++++++ .../328. Odd Even Linked List_test.go | 72 +++++++++++++++++++ .../328. Odd Even Linked List/README.md | 30 ++++++++ 3 files changed, 134 insertions(+) create mode 100644 Algorithms/328. Odd Even Linked List/328. Odd Even Linked List.go create mode 100644 Algorithms/328. Odd Even Linked List/328. Odd Even Linked List_test.go create mode 100644 Algorithms/328. Odd Even Linked List/README.md diff --git a/Algorithms/328. Odd Even Linked List/328. Odd Even Linked List.go b/Algorithms/328. Odd Even Linked List/328. Odd Even Linked List.go new file mode 100644 index 00000000..4f771cc6 --- /dev/null +++ b/Algorithms/328. Odd Even Linked List/328. Odd Even Linked List.go @@ -0,0 +1,32 @@ +package leetcode + +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +func oddEvenList(head *ListNode) *ListNode { + oddHead := &ListNode{Val: 0, Next: nil} + odd := oddHead + evenHead := &ListNode{Val: 0, Next: nil} + even := evenHead + + count := 1 + for head != nil { + if count%2 == 1 { + odd.Next = head + odd = odd.Next + } else { + even.Next = head + even = even.Next + } + head = head.Next + count++ + } + even.Next = nil + odd.Next = evenHead.Next + return oddHead.Next +} diff --git a/Algorithms/328. Odd Even Linked List/328. Odd Even Linked List_test.go b/Algorithms/328. Odd Even Linked List/328. Odd Even Linked List_test.go new file mode 100644 index 00000000..d66cedcf --- /dev/null +++ b/Algorithms/328. Odd Even Linked List/328. Odd Even Linked List_test.go @@ -0,0 +1,72 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +type question328 struct { + para328 + ans328 +} + +// para 是参数 +// one 代表第一个参数 +type para328 struct { + one []int +} + +// ans 是答案 +// one 代表第一个答案 +type ans328 struct { + one []int +} + +func Test_Problem328(t *testing.T) { + + qs := []question328{ + + question328{ + para328{[]int{1, 4, 3, 2, 5, 2}}, + ans328{[]int{1, 3, 5, 4, 2, 2}}, + }, + + question328{ + para328{[]int{1, 1, 2, 2, 3, 3, 3}}, + ans328{[]int{1, 2, 3, 3, 1, 2, 3}}, + }, + + question328{ + para328{[]int{4, 3, 2, 5, 2}}, + ans328{[]int{4, 2, 2, 3, 5}}, + }, + + question328{ + para328{[]int{1, 1, 1, 1, 1, 1}}, + ans328{[]int{1, 1, 1, 1, 1, 1}}, + }, + + question328{ + para328{[]int{3, 1}}, + ans328{[]int{3, 1}}, + }, + + question328{ + para328{[]int{1, 2, 3, 4, 5}}, + ans328{[]int{1, 3, 5, 2, 4}}, + }, + + question328{ + para328{[]int{}}, + ans328{[]int{}}, + }, + } + + fmt.Printf("------------------------Leetcode Problem 328------------------------\n") + + for _, q := range qs { + _, p := q.ans328, q.para328 + fmt.Printf("【input】:%v 【output】:%v\n", p, L2s(oddEvenList(S2l(p.one)))) + } + fmt.Printf("\n\n\n") +} diff --git a/Algorithms/328. Odd Even Linked List/README.md b/Algorithms/328. Odd Even Linked List/README.md new file mode 100644 index 00000000..447cfe6b --- /dev/null +++ b/Algorithms/328. Odd Even Linked List/README.md @@ -0,0 +1,30 @@ +# [328. Odd Even Linked List](https://leetcode.com/problems/odd-even-linked-list/) + +## 题目 + +Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes. + +You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity. + +Example 1: + +```c +Input: 1->2->3->4->5->NULL +Output: 1->3->5->2->4->NULL +``` + +Example 2: + +```c +Input: 2->1->3->5->6->4->7->NULL +Output: 2->3->6->7->1->5->4->NULL +``` + +Note: + +- The relative order inside both the even and odd groups should remain as it was in the input. +- The first node is considered odd, the second node even and so on ... + +## 题目大意 + +这道题和第 86 题非常类型。第 86 题是把排在某个点前面的小值放在一个链表中,排在某个点后端的大值放在另外一个链表中,最后 2 个链表首尾拼接一下就是答案。这道题思路也是一样的,分别把奇数和偶数都放在 2 个链表中,最后首尾拼接就是答案。 \ No newline at end of file