206.E 反转链表
Problem: 206. 反转链表
思路
思路1:递归。先反转从第二个节点开始的其他节点,然后再把第一个节点放到最后。
思路2:从第二个节点开始遍历,依次把cur.next
指向preHead
。最后需要记得把head.next
指向nil
Code
代码1:
func reverseList(head *ListNode) *ListNode {
// 为避免空指针问题,此处应该包含head.Next == nil的情况
if head == nil || head.Next == nil {
return head
}
newHead := reverseList(head.Next)
head.Next.Next = head
head.Next = nil //把原头结点的next指向nil,避免成环
return newHead
}
代码2:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
// 为避免空指针问题,此处应该包含head.Next == nil的情况
if head == nil || head.Next == nil {
return head
}
preHead := head
cur := head.Next
for cur != nil {
next := cur.Next //暂存下一个节点
cur.Next = preHead
preHead = cur
cur = next
}
head.Next = nil
return preHead
}
Last updated
Was this helpful?