前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每日一算法】(六)反转链表 leetcode 24题

【每日一算法】(六)反转链表 leetcode 24题

作者头像
被测试耽误的大厨
发布2023-11-17 11:01:53
870
发布2023-11-17 11:01:53
举报
文章被收录于专栏:测试平台系列测试平台系列

给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。

示例 1:

输入:head = [1,2,3,4,5]

输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]

输出:[2,1]

示例 3:

输入:head = []

输出:[]

代码语言:javascript
复制
思考1: 
迭代法,使用临时值交换求解,直接使用迭代完成
type LinkNode struct {
  val  int
  Next *LinkNode
}
func reverseList1(head *LinkNode) (temp *LinkNode) {
  for head != nil {
    // 声明临时节点等于head的下一个节点
    next := head.Next
    // 当第一次循环时
    // temp 为nil,所以此时head的下一个节点指向temp,即指向为空
    // 也就是head.Next = nil
    // 此时temp=head,也就是temp.Next=nil
    // 再将临时节点赋值给head
    // 以此类推
    head.Next, temp, head = temp, head, next
  }
  return
}
思考2:
递归法, 递归比较抽象,理解起来较为困难
func reverseList2(head *LinkNode) (temp *LinkNode) {
  if head == nil || head.Next == nil {
    return head
  }
  temp = reverseList2(head.Next)
  head.Next.Next = head
  head.Next = nil
  return
}
思考3:
使用栈,昨天刚刚写过的知识,如有不懂可以去查阅一下
遍历列表并入栈
遍历栈
func reverseList3(head *LinkNode) {
  stack :=  NewStack()
  for head != nil {
    stack.Push(head.val)
    head = head.Next
  }
  stack.Print()
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈测试开发之路 微信公众号,前往查看

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

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

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