为了反转这个单链表,我们先让头结点的next域指向结点2,再让结点1的next域指向结点3,最后将结点2的next域指向结点1,就完成了第一次交换,顺序就变成了Header-结点2-结点1-结点3-结点4-NULL,然后进行相同的交换将结点3移动到结点2的前面,然后再将结点4移动到结点3的前面就完成了反转,思路有了
package main
import (
"fmt"
)
//反转单链表,头指针,单链表
type List struct {
next *List
data int
}
var Head = &List{}
func add_node(val int) {
newnode := &List{data: val}
if Head.next == nil {
Head.next = newnode
} else {
newnode.next = Head.next
Head.next = newnode
}
}
func show_list() {
tmp := Head.next
for tmp != nil {
fmt.Printf("%d ", tmp.data)
tmp = tmp.next
}
fmt.Printf("\n")
}
//example:例如此例子,1往后面链,Head往1后面那个节点前一个节点链,此节点往前一个节点链
// 1->3 2->1 H->2 -----> 1->4 3->2 H->4 .............
func reverse_list() {
tmp := Head.next
for tmp.next != nil {
midnode := tmp.next
tmp.next = tmp.next.next
midnode.next = Head.next
Head.next = midnode
}
}
func main() {
add_node(1)
add_node(5)
add_node(6)
add_node(10)
show_list()
reverse_list()
show_list()
}
输出结果:
10 6 5 1
1 5 6 10
总结:head,1节点(顺序时候第一个,逆序时候倒数第一个)往后链,中间节点反链