golang 链表相邻元素反转

发布时间:2024-11-21 20:28:47

golang 链表相邻元素反转

链表是一种常见的数据结构,它由一组节点组成,每个节点包含两个字段:value和next。将链表中相邻元素进行反转是一个常见的操作。

首先,我们需要定义一个链表节点的结构。

```go type Node struct { Val int Next *Node } ```

接下来,我们可以编写一个函数来实现链表相邻元素的反转。

```go func reversePairs(head *Node) *Node { dummy := &Node{Next: head} prev := dummy for prev.Next != nil && prev.Next.Next != nil { first := prev.Next second := prev.Next.Next temp := second.Next prev.Next = second second.Next = first first.Next = temp prev = first } return dummy.Next } ```

在这个函数中,我们使用了两个指针来追踪需要反转的相邻元素。prev指针指向当前待反转元素的上一个节点,first和second分别指向要交换的两个节点。我们使用temp变量来临时存储后续元素,以便在交换节点之后恢复链表的连接。

最后,我们可以编写一个简单的测试来验证这个函数的正确性。

```go func main() { head := &Node{Val: 1} node1 := &Node{Val: 2} node2 := &Node{Val: 3} node3 := &Node{Val: 4} head.Next = node1 node1.Next = node2 node2.Next = node3 reversed := reversePairs(head) // 打印反转后的链表 for cur := reversed; cur != nil; cur = cur.Next { fmt.Println(cur.Val) } } ```

在这个测试中,我们创建了一个包含四个节点的链表,并将其打印出来。运行后,我们可以看到输出结果为4,3,2,1,表明链表中的相邻元素已成功反转。

总之,通过定义链表节点的结构和编写一个反转链表的函数,我们可以很方便地实现对链表中相邻元素的反转。这个操作在处理链表相关问题时是非常有用的。

相关推荐