如何实现链表的逆序golang(两种方法:就地逆序法和插入法) | 您所在的位置:网站首页 › golang单链表反转 › 如何实现链表的逆序golang(两种方法:就地逆序法和插入法) |
题目描述: 给定一个带头结点的单链表,请将其逆序。即如果单链表原来为head->1->2->3->4->5->6->7,则逆序后变为head->7->6->5->4->3->2->1 分析与解答: 由于单链表与数组不同,单链表中每个结点的地址都存储在其前驱结点的指针域中,因此对单链表中任何一个结点的访问只能从链表的头指针开始进行遍历。在对链表的操作过程中,需要特别注意在修改结点指针域的时候,记录下后继结点的地址,否则会丢失后继结点。 方法一:就地逆序 思路分析: 在遍历链表的时候,修改当前结点指针域的指向,让其指向它的前驱结点,因此需要定义一个指针变量存前驱结点的地址,为了防止后继结点丢失,还要定义一个指针变量存后继变量的地址,前驱结点和后继结点保存好后,就可以直接进行指针的逆序了。 注意:对链表首尾结点的特殊处理 代码如下: package main import "fmt" //链表定义 type LNode struct { data interface{ } next *LNode } func reverse(node *LNode) { if node == nil || node.next == nil { return } var pre *LNode //定义前驱结点 var |
CopyRight 2018-2019 实验室设备网 版权所有 |