前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode:Go实现翻转链表

leetcode:Go实现翻转链表

作者头像
微客鸟窝
发布2021-08-18 15:27:05
1.2K0
发布2021-08-18 15:27:05
举报
文章被收录于专栏:Go语言指北

您诸位好啊,我是无尘,之前 Go 通关的系列文章已经完结了,接下来,我们使用 Go 语言来刷一些力扣算法题目,练习 Go 的同时,还能掌握算法,一举两得!

题目:

思路:

原始链表

  • 声明一个空的节点(pre),表示前一个节点
  • 变量 cur 表示第一个节点

开始:

  1. 将第二个节点“位置”先保存到一个临时变量,防止 1,2 节点断开后找不到2节点;
  2. 第一个节点 cur 的 next 指向 pre ,完成 1 节点的翻转;
  3. pre 和 cur 分别向后移动一个节点;
  4. 重复上面 3 步,依次完成节点翻转;

翻转步骤1

翻转步骤2

翻转步骤3

核心代码:

代码语言:javascript
复制
//反转链表的实现
func reverseList(head *ListNode) *ListNode {
 var pre *ListNode = nil
 cur := head
 for cur != nil {
  nextTemp := cur.Next //1. 将下一个节点保存到临时变量,防止下面覆盖丢失
  cur.Next = pre       //2. 当前节点指向前节点,当前节点完成转换
  pre = cur            //3. 前节点变当前节点,给下一个节点转换做准备
  cur = nextTemp       //4. 当前节点变下节点,给下一个节点转换做准备
  //pre, cur, cur.Next = cur, cur.Next, pre //上面四步可以总结为此处一行
 }
 return pre
}

完整代码演示:

代码语言:javascript
复制
package main

import "fmt"

//链表节点
type ListNode struct {
 Val  int
 Next *ListNode
}

//反转链表的实现
func reverseList(head *ListNode) *ListNode {
 var pre *ListNode = nil
 cur := head
 for cur != nil {
  nextTemp := cur.Next //1. 将下一个节点保存到临时变量,防止下面覆盖丢失
  cur.Next = pre       //2. 当前节点指向前节点,当前节点完成转换
  pre = cur            //3. 前节点变当前节点,给下一个节点转换做准备
  cur = nextTemp       //4. 当前节点变下节点,给下一个节点转换做准备
  //pre, cur, cur.Next = cur, cur.Next, pre //上面四步可以总结为此处一行
 }
 return pre
}

func main() {
 head := new(ListNode)
 head.Val = 1
 ln2 := new(ListNode)
 ln2.Val = 2
 ln3 := new(ListNode)
 ln3.Val = 3
 ln4 := new(ListNode)
 ln4.Val = 4
 ln5 := new(ListNode)
 ln5.Val = 5
 head.Next = ln2
 ln2.Next = ln3
 ln3.Next = ln4
 ln4.Next = ln5

 this1 := head
 for this1 != nil {
  fmt.Println(this1.Val)
  this1 = this1.Next
 }

 pre := reverseList(head)
 fmt.Println("翻转后:")
 this2 := pre
 for this2 != nil {
  fmt.Println(this2.Val)
  this2 = this2.Next
 }
}

运行结果:

代码语言:javascript
复制
1
2
3
4
5
翻转后:
5
4
3
2
1

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微客鸟窝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档