为了反转这个单链表,我们先让头结点的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节点(顺序时候第一个,逆序时候倒数第一个)往后链,中间节点反链