Go语言链表反转实现详解
以下是一个使用Go语言实现的反向链表的示例代码:
package main
import "fmt"
type Node struct {
data int
next *Node
}
func (n *Node) reverse() *Node {
var prev *Node = nil
current := n
for current != nil {
next := current.next
current.next = prev
prev = current
current = next
}
return prev
}
func (n *Node) printList() {
for n != nil {
fmt.Printf('%d -> ', n.data)
n = n.next
}
fmt.Printf('nil\n')
}
func main() {
head := &Node{data: 1, next: nil}
node2 := &Node{data: 2, next: nil}
node3 := &Node{data: 3, next: nil}
node4 := &Node{data: 4, next: nil}
head.next = node2
node2.next = node3
node3.next = node4
fmt.Println('Original Linked List:')
head.printList()
reversedHead := head.reverse()
fmt.Println('Reversed Linked List:')
reversedHead.printList()
}
在这个示例中,我们定义了一个Node类型,它包含一个整数data和一个指向下一个节点的指针next。链表的头节点被定义为一个指向第一个节点的指针。
我们使用reverse()方法来反转链表中的所有节点。该方法使用三个指针:prev、current和next,并在每次迭代中将当前节点的next指针指向前一个节点。这样,最后一个节点变成了新的头节点,并且整个链表已经被反转。
最后,我们使用printList()方法打印原始和反转后的链表。在main()函数中,我们创建了一个包含四个节点的链表,并在控制台上打印了原始和反转后的链表。
原文地址: https://www.cveoy.top/t/topic/mzww 著作权归作者所有。请勿转载和采集!