|
| 1 | +package main |
| 2 | + |
| 3 | +import "fmt" |
| 4 | + |
| 5 | +// ListNode represents a node in the linked list |
| 6 | +type ListNode struct { |
| 7 | + Val int |
| 8 | + Next *ListNode |
| 9 | +} |
| 10 | + |
| 11 | +// ReverseListIteratively reverses a linked list iteratively |
| 12 | +func ReverseListIteratively(head *ListNode) *ListNode { |
| 13 | + var prev, curr *ListNode |
| 14 | + curr = head |
| 15 | + |
| 16 | + for curr != nil { |
| 17 | + nextTemp := curr.Next |
| 18 | + curr.Next = prev |
| 19 | + prev = curr |
| 20 | + curr = nextTemp |
| 21 | + } |
| 22 | + |
| 23 | + return prev |
| 24 | +} |
| 25 | + |
| 26 | +// ReverseListRecursively reverses a linked list recursively |
| 27 | +func ReverseListRecursively(head *ListNode) *ListNode { |
| 28 | + if head == nil || head.Next == nil { |
| 29 | + return head |
| 30 | + } |
| 31 | + |
| 32 | + newHead := ReverseListRecursively(head.Next) |
| 33 | + head.Next.Next = head |
| 34 | + head.Next = nil |
| 35 | + |
| 36 | + return newHead |
| 37 | +} |
| 38 | + |
| 39 | +func main() { |
| 40 | + // Create a linked list: 1 -> 2 -> 3 -> 4 -> 5 |
| 41 | + head := &ListNode{1, &ListNode{2, &ListNode{3, &ListNode{4, &ListNode{5, nil}}}}} |
| 42 | + |
| 43 | + // Reverse the linked list iteratively |
| 44 | + reversedListIteratively := ReverseListIteratively(head) |
| 45 | + fmt.Println("Reversed linked list (iteratively):") |
| 46 | + for reversedListIteratively != nil { |
| 47 | + fmt.Printf("%d ", reversedListIteratively.Val) |
| 48 | + reversedListIteratively = reversedListIteratively.Next |
| 49 | + } |
| 50 | + fmt.Println() |
| 51 | + |
| 52 | + head = &ListNode{1, &ListNode{2, &ListNode{3, &ListNode{4, &ListNode{5, nil}}}}} |
| 53 | + // Reverse the linked list recursively |
| 54 | + reversedListRecursively := ReverseListRecursively(head) |
| 55 | + fmt.Println("Reversed linked list (recursively):") |
| 56 | + for reversedListRecursively != nil { |
| 57 | + fmt.Printf("%d ", reversedListRecursively.Val) |
| 58 | + reversedListRecursively = reversedListRecursively.Next |
| 59 | + } |
| 60 | + fmt.Println() |
| 61 | +} |
0 commit comments