题目描述
给你单链表的头节点 head,请你反转链表,并返回反转后的链表。
解题思路
使用迭代法,维护三个指针:prev(前驱)、curr(当前)、next(后继)。每次将当前节点的 Next 指向前驱,然后三个指针整体后移。
代码实现
Go
type ListNode struct {
Val int
Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
var prev *ListNode
curr := head
for curr != nil {
next := curr.Next
curr.Next = prev
prev = curr
curr = next
}
return prev
}
复杂度分析
- 时间复杂度:O(n),遍历一次链表
- 空间复杂度:O(1),只使用常数空间
