给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。
数据范围: n≤1000 要求:空间复杂度 O(1) ,时间复杂度 O(n) 。
如当输入链表{1,2,3}时, 经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
原地不动改方向
package main
type ListNode struct {
Val int
Next *ListNode
}
// 反转链表
func main() {
var next *ListNode
for _, v := range [3]int{3, 2, 1} {
node := ListNode{
Val: v,
Next: next,
}
next = &node
}
ReverseListRaw(next)
ReverseList(next)
}
func ReverseList(pHead *ListNode) *ListNode {
var pre *ListNode
var cur *ListNode = pHead
var nex *ListNode
for {
if cur == nil {
break
}
nex = cur.Next
cur.Next = pre
pre = cur
cur = nex
}
return pre
}
func ReverseListRaw(pHead *ListNode) *ListNode {
var reverse *ListNode
for {
if pHead == nil {
break
}
node := ListNode{
Val: pHead.Val,
Next: reverse,
}
reverse = &node
pHead = pHead.Next
}
return reverse
}