题解 | #反转链表#

反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

package main 

import "fmt"

type ListNode struct {
	Val  int       // 当前值
	Next *ListNode // 后面待反转区
}

// ReverseList
// 整体思路: 如果将Next作为当前节点的子节点,则整个过程可以理解为,通过循环,不断将Next变为当前节点,并将父节点作为next,反向剥皮的过程
func ReverseList(head *ListNode) *ListNode {
	// 1. {} 与 {1} 时 ,不需要反转
	if head == nil || head.Next == nil {
		return head
	}
	// 2.
	var newHead *ListNode //
	for head != nil {
		next := head.Next   // 将待反转区暂存
		head.Next = newHead // 将当前指针与后反转区 反转
		newHead = head      // 将反转后的链表赋值给新的链表
		head = next         // 将待反转区替换head, 进入下次循环
	}
	fmt.Println(newHead)
	return newHead
}

// input {1,2,3,4}
// 第一次循环前: head = {1,2,3,4}        head.Next = {2,3,4}                 newHead = nil
// 第一次循环后: head.Val=1 next={2,3,4} head.Next=nil   newHead = {1}       newHead.Next = nil     head = {2,3,4}
// 第二次循环后: head.Val=2 next={3,4}   head.Next={1}   newHead = {2,1}     newHead.Next = {1}     head = {3,4}
// 第三次循环后: head.Val=3 next={4}     head.Next={2,1} newHead = {3,2,1}   newHead.Next = {2,1}   head = {4}
// 第四次循环后: head.Val=4 next=nil     head.Next=nil   newHead = {4,3,2,1} newHead.Next = {3,2,1} head = nil

全部评论

相关推荐

求offer的大角牛:简历写的第一乱,没有突出重点,第二项目太多太杂看不出来有啥核心技术,第三自我评价太多了,第四获得的荣誉没啥含金量,可以不写,反正问题不少
点赞 评论 收藏
分享
zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务