Skip to content

Commit b4316f4

Browse files
authored
148 solved. (#79)
1 parent b7823ef commit b4316f4

File tree

4 files changed

+79
-0
lines changed

4 files changed

+79
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ continually updating 😃.
7676
* [83. Remove Duplicates from Sorted List](src/0083_remove_duplicates_from_sorted_list/rdfsl.go)
7777
* [86. Partition List](src/0086_partition_list/partition_list.go)   *`two pointers`*
7878
* [92. Reverse Linked List II](src/0092_reverse_linked_list_2/reverse_linked_list2.go)
79+
* [148. Sort List](src/148_Sort_List/sortlist.go)   *`sort`*
7980
* [203. Remove Linked List Elements](src/0203_remove_linked_list_elements/remove_linked_list_elements.go)
8081
* [206. Reverse Linked List](src/0206_reverse_linked_list/reverse_linked_list.go)
8182
* [237. Delete Node in a Linked List](src/0237_delete_node_in_a_linked_list/dniall.go)

src/148_Sort_List/sortlist.go

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
148. Sort List
3+
https://leetcode.com/problems/sort-list/
4+
*/
5+
// time: 2019-03-04
6+
7+
package sortlist
8+
9+
// ListNode Definition for singly-linked list.
10+
type ListNode struct {
11+
Val int
12+
Next *ListNode
13+
}
14+
15+
// merge sort
16+
// time complexity: O(n * log(n))
17+
// using recursion, the system stack is used.
18+
func sortList(head *ListNode) *ListNode {
19+
if head == nil || head.Next == nil {
20+
return head
21+
}
22+
23+
prev, slow, fast := head, head, head
24+
for fast != nil && fast.Next != nil {
25+
prev = slow
26+
slow = slow.Next
27+
fast = fast.Next.Next
28+
}
29+
prev.Next = nil
30+
return merge(sortList(head), sortList(slow))
31+
}
32+
33+
func merge(headA, headB *ListNode) *ListNode {
34+
dummy := &ListNode{}
35+
tail := dummy
36+
37+
for headA != nil && headB != nil {
38+
if headA.Val > headB.Val {
39+
tail.Next = headB
40+
headB = headB.Next
41+
} else {
42+
tail.Next = headA
43+
headA = headA.Next
44+
}
45+
tail = tail.Next
46+
}
47+
if headA != nil {
48+
tail.Next = headA
49+
} else {
50+
tail.Next = headB
51+
}
52+
return dummy.Next
53+
}

src/148_Sort_List/sortlist_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package sortlist
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func TestSortList(t *testing.T) {
9+
head := createSingleLinkedList([]int{-1, 5, 3, 4, 0})
10+
expected := createSingleLinkedList([]int{-1, 0, 3, 4, 5})
11+
if res := sortList(head); !reflect.DeepEqual(res, expected) {
12+
t.Errorf("expected %v, got %v", expected, res)
13+
}
14+
}
15+
16+
func createSingleLinkedList(nums []int) *ListNode {
17+
dummy := ListNode{}
18+
cur := &dummy
19+
for _, val := range nums {
20+
cur.Next = &ListNode{Val: val}
21+
cur = cur.Next
22+
}
23+
return dummy.Next
24+
}

src/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
|0125|[Valid Palindrome](0125_valid_palindrome/valid_palindrome.go)|Easy||
6161
|0136|[136. Single Number](0136_single_number/single_number.go)|Easy|*`hash table;`* *`bit manipulation`*|
6262
|0144|[144. Binary Tree Preorder Traversal](0144_binary_tree_preorder_traversal/binary_tree_preorder_traversal.go)|Medium|*`binary tree`*|
63+
|0148|[148. Sort List](148_Sort_List/sortlist.go)|Medium|*`sort;`* *`linked list`*|
6364
|0150|[150. Evaluate Reverse Polish Notation](0150_evaluate_reverse_polish_notation/evaluate_reverse_polish_notation.go)|Medium|*`stack`*|
6465
|0153|[153. Find Minimum in Rotated Sorted Array](0153_find_minimum_in_rotated_sorted_array/fmirsa.go)|Medium|*`binary search`*|
6566
|0155|[155. Min Stack](0155_min_stack/min_stack.go)|Easy|*`stack`*|

0 commit comments

Comments
 (0)