Given the head of a singly linked list, reverse the list, and return the reversed list.
Example 1:
Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]
Example 2:
Input: head = [1,2]
Output: [2,1]
Example 3:
Input: head = []
Output: []
Constraints:
Follow up: A linked list can be reversed either iteratively or recursively. Could you implement both?
func reverseList(head *ListNode) *ListNode {
end := head
reverse := head
if head == nil{
return head
}
for end.Next != nil {
end = end.Next
}
new := &ListNode{Val: end.Val, Next: nil}
for reverse.Next != nil {
buf := new.Next
n := &ListNode{Val: reverse.Val, Next: buf}
new.Next = n
reverse = reverse.Next
}
return new
}
https://go.dev/play/p/QcV7pnJujM4
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil{
return head
}
cur := head
var reversed *ListNode
for (cur != nil) {
temp := cur.Next
cur.Next = reversed
reversed = cur
cur = temp
}
return reversed
}
func reverseList(head *ListNode) *ListNode {
// base case
if head == nil || head.Next == nil {
return head
}
// 递归已经帮你反转了 head 之后的所有节点,并返回反转后的头节点 last
// 你需要做的就是把当前节点 head 和反转后的链表链接起来即可。
last := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return last
}
func reverseList(head *ListNode) *ListNode {
var prev *ListNode = nil
curr := head
var next *ListNode = nil
for curr != nil {
next = curr.Next
curr.Next = prev
prev = curr
curr = next
}
return prev
}
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
var prev *ListNode
for head != nil {
tempNext := head.Next
head.Next = prev
prev = head
head = tempNext
}
return prev
}
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
cur := head
var prev, next *ListNode
for cur != nil {
next = cur.Next
cur.Next = prev
prev = cur
cur = next
}
return prev
}
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
newHead := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return newHead
}
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
newHead := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return newHead
}
func reverseList(head *ListNode) *ListNode {
curr := head
var newList *ListNode = nil
for curr != nil {
newList = &ListNode{
Val: curr.Val,
Next: newList,
}
curr = curr.Next
}
return newList
}
[Go] Linked List - Odd Even Linked List (0) | 2022.05.06 |
---|---|
[Go] Linked List - Remove Linked List Elements (0) | 2022.05.05 |
[Go] Linked List - Summary - Two-Pointer in Linked List from Java to Go (0) | 2022.05.01 |
[Go] Linked List - Remove Nth Node From End of List (0) | 2022.05.01 |
[Go] Linked List - Linked List Cycle2(Detect Cycle) (0) | 2022.05.01 |
댓글 영역