Day.8 Reverse Linked List

Leetcode #206. Reverse Linked List

简单来说这一题要做反转链结
ex.
input: 1->2->3->4
output: 4->3->2->1

如果你没做过这题,强烈建议你先思考一下怎麽解。


防雷
防雷
防雷


最直觉的方式可以新建一个slice([]*ListNode),去把全部的节点都放进去,最後slice从尾去读取,重新建一个链结就行了。

这样做的时间复杂度为O(n),空间复杂性O(n)要用slice存下链结的地址。

现在为大家介绍一个更好的解法,可以省下一些记忆体。

先来看一下它的流程:

1 2 3 4
2 1 3 4
3 2 1 4
4 3 2 1

每一次新节点都把第一个节点接在後面,当你跑完本个链结,就完成反转了。

来看一下程序:

func reverseLinkedList(head *ListNode) *ListNode {
	// prevNode一开始为是空
	// 这样第一个节点的next会接到nil,才不会造成无限的链结
	var prevNode *ListNode
	currentNode := head

	// 节点交换的过程
	for currentNode != nil {
		temp := currentNode.Next
		currentNode.Next = prevNode // 最前面的节点接到目前节点的後面
		prevNode = currentNode
		currentNode = temp
	}

	return prevNode // 回传第一个节点
}

明天来解其他题目~


<<:  [Day 16] JavaScript 网页事件处理

>>:  9/29(三) 制造业资安趋势:永续营业风险大解密线上研讨会

【day6】彰化市区美食

这次中秋连假返乡 顺路到彰化市区吃一波在地美食 从彰化火车站附近开吃 第一站北门口肉圆 脆皮是彰化肉...

Day 9 合格了吗?

启动引擎,把车开回夜晚的车阵中,虽然可能只是处在车流中,默默无名的行驶着,或者快速的疾驶着,又或者处...

DAY29 Aidea专案实作-AOI瑕疵检测(4/4)

经过不懈的努力!我们终於来到此次专案时做的最後一个章节,前三个部分我们已经算是达成任务,成功训练出一...

[DAY-27] 适合你的 才是真正的好职涯

经营你的职业生涯 人对於甚麽叫 理想职涯 都有一套自己的想法 在经营职涯时候 追求目标要有弹性 适...

Proxy 代理模式

今天要谈到代理模式,其实跟昨天的装饰器模式很类似。代理模式的目的在於,因应某些条件替换物件原本的行为...