Skip to content

反转单链表

Go
package main

import "fmt"

type ListNode struct {
	Val  int
	Next *ListNode
}

func printListNode(head *ListNode) {
	for head != nil {
		fmt.Println(head.Val)
		head = head.Next
	}
}

func revListNode(head *ListNode) *ListNode {
	var prev *ListNode

	for head != nil {
		next := head.Next
		head.Next = prev
		prev = head
		head = next
	}

	return prev
}

func main() {
	l := ListNode{
		Val: 1, Next: &ListNode{
			Val: 2, Next: &ListNode{
				Val: 3, Next: &ListNode{
					Val:  4,
					Next: nil,
				},
			},
		},
	}

	printListNode(&l)

	printListNode(revListNode(&l))
}