以下是一个使用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()方法来反转链表中的所有节点。该方法使用三个指针:prevcurrentnext,并在每次迭代中将当前节点的next指针指向前一个节点。这样,最后一个节点变成了新的头节点,并且整个链表已经被反转。

最后,我们使用printList()方法打印原始和反转后的链表。在main()函数中,我们创建了一个包含四个节点的链表,并在控制台上打印了原始和反转后的链表。

Go语言链表反转实现详解

原文地址: https://www.cveoy.top/t/topic/mzww 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录