反转链表的golang实现
问题:反转一个单链表。
输入: ->->->->->NULL
输出: ->->->->->NULL
首先先认识一下链表这个数据结构:
链表节点中有两个元素:
- 值
- 指针
type ListNode struct {
Val int
Next *ListNode
}
Next指向下一个节点

那么这道题其实就是把指针指向前一个节点
| 位置调换次数 | pre | cur | whole |
|---|---|---|---|
| 0 | nil | 1->2->3->4->5 | 1->2->3->4->5 |
| 1 | 1->nil | 2->-3>->4->5 | 2->3->4->5->1->nil |
| 2 | 2->1->nil | 3->4->5 | 3->4->5->2->1->nil |
| 3 | 3->2->1->nil | 4->5 | 4->5->3->2->1->nil |
| 4 | 4->3->2->1->nil | 5 | 5->4->3->2->1->nil |
可以看出来
- pre是cur的最前面那位(pre = cur)
- cur就是当前位的后面链表元素(cur = cur.Next)
- cur.Next肯定是接pre(cur.Next = pre)
完整代码:
package main import "fmt" //链表节点
type ListNode struct {
Val int
Next *ListNode
} //反转链表的实现
func reversrList(head *ListNode) *ListNode {
cur := head
var pre *ListNode = nil
for cur != nil {
pre, cur, cur.Next = cur, cur.Next, pre //这句话最重要
}
return pre
} func main() {
head := new(ListNode)
head.Val =
ln2 := new(ListNode)
ln2.Val =
ln3 := new(ListNode)
ln3.Val =
ln4 := new(ListNode)
ln4.Val =
ln5 := new(ListNode)
ln5.Val =
head.Next = ln2
ln2.Next = ln3
ln3.Next = ln4
ln4.Next = ln5 pre := reversrList(head)
fmt.Println(pre)
}
反转链表的golang实现的更多相关文章
- 剑指Offer面试题:15.反转链表
一.题目:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表结点定义如下,这里使用的是C#描述: public class Node { public in ...
- 剑指offer六:反转链表
输入一个链表,反转链表后,输出链表的所有元素 public class ListNode { int val; ListNode next = null; ListNode(int val) { th ...
- 剑指Offer 反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素. 思路: 法1:用栈,压栈出栈 法2:头插法(有递归非递归2中) AC代码: /* struct ListNode { int va ...
- PAT乙级 1025. 反转链表 (25)
1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请 ...
- 剑指Offer:面试题16——反转链表(java实现)
问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...
- (剑指Offer)面试题16:反转链表
题目: 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表的定义如下: struct ListNode{ int val; ListNode* next; }; 思路: 反 ...
- 【剑指offer】递归循环两种方式反转链表
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25737023 本文分别用非递归和递归两种方式实现了链表的反转,在九度OJ上AC. 题目描写 ...
- 【剑指offer 面试题16】反转链表
思路: 用三个指针preNode.curNode.nextNode完成. #include <iostream> using namespace std; struct ListNode ...
- 剑指OFFER之反转链表(九度OJ1518)
题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<= ...
随机推荐
- 当Elasticsearch遇见Kafka
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由michelmu发表于云+社区专栏 Elasticsearch作为当前主流的全文检索引擎,除了强大的全文检索能力和高扩展性之外,对多种 ...
- FFmpeg编解码处理4-音频编码
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10584948.html FFmpeg编解码处理系列笔记: [0]. FFmpeg时间戳详 ...
- Spark SQL结构化数据处理
Spark SQL是Spark框架的重要组成部分, 主要用于结构化数据处理和对Spark数据执行类SQL的查询. DataFrame是一个分布式的,按照命名列的形式组织的数据集合. 一张SQL数据表可 ...
- Linux进程间通信(System V) --- 消息队列
消息队列 IPC 原理 消息队列是消息的链式队列,如下图为消息队列的模型.整个消息队列有两种类型的数据结构. 1.msqid_ds 消息队列数据结构:描述整个消息队列的属性,主要包括整个消息队列的权限 ...
- 6.分析request_irq和free_irq函数如何注册注销中断(详解)
上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq ...
- 【RabbitMQ】8、RabbitMQ之mandatory和immediate
1. 概述 mandatory和immediate是AMQP协议中basic.publish方法中的两个标识位,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能.对于刚开始接触Rabbi ...
- 【shell编程】2、语法
Linux 下执行.sh文件总是提示permission denied 如果你是root登陆的话(不是的话,切换到root用户,对*.sh赋可执行的权限) chmod 777 *.sh or ...
- canvas-star2.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Windows 10修复
[以管理员运行如下命令]: 1.sfc /scannow 命令将扫描所有受保护的系统文件,并用位于 %WinDir%\System32\dllcache 的压缩文件夹中的缓存副本替换损坏的文件. 2. ...
- Python 获取被调用函数名称,所处模块,被调用代码行
获取被调用函数名称,所处模块,被调用代码行 by:授客 QQ:1033553122 module2.py: #!/usr/bin/env python # -*- coding:utf-8 -*- _ ...