Skip to content

Commit 0358d65

Browse files
committed
206. Reverse Linked List
1 parent 566bcd6 commit 0358d65

File tree

4 files changed

+70
-1
lines changed

4 files changed

+70
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# LeetCode
22

3-
![Problems Solved](https://img.shields.io/badge/Problems%20Solved-33%20%2F%203031-1f425f?logo=leetcode)
3+
![Problems Solved](https://img.shields.io/badge/Problems%20Solved-34%20%2F%203031-1f425f?logo=leetcode)
44
![Language: Golang](https://img.shields.io/badge/language-Golang-00ADD8?logo=go)
55
![Language: Rust](https://img.shields.io/badge/language-Rust-00ADD8?logo=rust)
66
![Language: Bash](https://img.shields.io/badge/language-Bash-00ADD8?logo=gnubash&logoColor=f5f5f5)
@@ -28,6 +28,7 @@
2828
| 125 | [Valid Palindrome](https://leetcode.com/problems/valid-palindrome/) | [Go](go/0125_valid_palindrome) | 🟢 | String, Pointer |
2929
| 136 | [Single Number](https://leetcode.com/problems/single-number/) | [Go](go/0136_single_number) | 🟢 | Array, Bit Manipulation |
3030
| 155 | [Min Stack](https://leetcode.com/problems/min-stack/) | [Go](go/0155_min_stack) | 🟢 | Stack |
31+
| 206 | [Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) | [Go](go/0206_reverse_linked_list) | 🟢 | Linked List, Pointer |
3132
| 217 | [Contains Duplicate](https://leetcode.com/problems/contains-duplicate/) | [Go](go/0217_contains_duplicate) | 🟢 | Array, Hash Table |
3233
| 226 | [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/) | [Go](go/0226_invert_binary_tree) | 🟢 | Tree, BFS, DFS, Binary Tree |
3334
| 242 | [Valid Anagram](https://leetcode.com/problems/valid-anagram/) | [Go](go/0242_valid_anagram) | 🟢 | Hash Table, String |
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package reverse_linked_list
2+
3+
type ListNode struct {
4+
Val int
5+
Next *ListNode
6+
}
7+
8+
// ToSlice convert linked list to slice (only for tests)
9+
func (n *ListNode) ToSlice() []int {
10+
node := n
11+
result := make([]int, 0)
12+
for node != nil {
13+
result = append(result, node.Val)
14+
node = node.Next
15+
}
16+
17+
return result
18+
}
19+
20+
// SliceToLinkedList return head node of linked list (only for tests)
21+
func SliceToLinkedList(data []int) *ListNode {
22+
var node *ListNode
23+
for i := len(data) - 1; i >= 0; i-- {
24+
node = &ListNode{Val: data[i], Next: node}
25+
}
26+
27+
return node
28+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package reverse_linked_list
2+
3+
func reverseList(head *ListNode) *ListNode {
4+
var newList, nextNode *ListNode
5+
currentNode := head
6+
7+
for currentNode != nil {
8+
nextNode = currentNode.Next
9+
currentNode.Next = newList
10+
newList = currentNode
11+
currentNode = nextNode
12+
}
13+
14+
return newList
15+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package reverse_linked_list
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func TestReverseList(t *testing.T) {
9+
tests := []struct {
10+
input []int
11+
want []int
12+
}{
13+
{input: []int{1, 2, 3, 4, 5}, want: []int{5, 4, 3, 2, 1}},
14+
{input: []int{1, 2}, want: []int{2, 1}},
15+
{input: []int{}, want: []int{}},
16+
{input: []int{9, 9, 9, 9, 9}, want: []int{9, 9, 9, 9, 9}},
17+
}
18+
19+
for i, tc := range tests {
20+
got := reverseList(SliceToLinkedList(tc.input))
21+
if !reflect.DeepEqual(tc.want, got.ToSlice()) {
22+
t.Fatalf("Case #%d: expected: %v, got: %v", i+1, tc.want, got.ToSlice())
23+
}
24+
}
25+
}

0 commit comments

Comments
 (0)