Skip to content

Latest commit

 

History

History
72 lines (60 loc) · 1.08 KB

24.md

File metadata and controls

72 lines (60 loc) · 1.08 KB

反转链表

题目

给定一个单链表的头结点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
}