go 单链表的增加,删除,翻转
package main import "fmt" //单链的数据结构 type Node struct { value int next *Node } //单链表,head 头结点表示单链表 type List struct { head *Node } //创建单链表 func createOneList() *List { return &List{head: nil} } //增加链表结点 func (l *List) addElement(value int) { if l.head == nil { node := Node{value: value} l.head = &node return } item := l.head //遍历找到合适的插入位置 for { if item.value == value { break } if item.value > value { //fmt.Printf("item.value %v value %v \n", item.value, value) temNode := Node{ next: item.next, value: item.value, } item.next = &temNode item.value = value break } if item.value < value && item.next == nil { temNode := Node{ value: value, } item.next = &temNode break } item = item.next } } //删除链表指定结点 func (l *List) deleteElement(value int) { if l.head == nil { return } item := l.head //非最后一个结点 for ; item.next != nil; item = item.next { if item.value == value { item.value = item.next.value //需要先赋值value item.next = item.next.next break } //最后一个结点 if item.next.value == value && item.next.next == nil { item.next = nil } } } //翻转单链 func (l *List) reserveLink(n *Node) { //如果链表为空,或者链表只有一个结点则返回 if n == nil || n.next == nil { return } var prev *Node current := n //fmt.Printf("%v", current) //首先判断链表是否为空或只有一个节点,如果是,则直接返回不进行翻转。 //如果不是,则定义prev和current两个指针,分别指向链表的前一个节点和当前节点。 //在循环中,首先保存当前节点的下一个节点,将当前节点指向前一个节点,然后将指针向后移动。最后,将链表头指向翻转后的最后一个节点prev for current != nil { next := current.next current.next = prev //fmt.Printf("%v \n", current.value) prev = current current = next } l.head = prev } //展示链表结点 func (l *List) showList() { item := l.head for ; item != nil; item = item.next { fmt.Printf("展示元素 %v \n", item.value) } } func main() { fmt.Println(3333) oneList := createOneList() // fmt.Printf("%v", oneList) oneList.addElement(11) oneList.addElement(57) //oneList.showList() oneList.addElement(23) oneList.addElement(8) oneList.addElement(5) oneList.showList() oneList.deleteElement(8) fmt.Printf("展示删除后的链表结点\n") oneList.showList() oneList.reserveLink(oneList.head) fmt.Printf("展示翻转后的链表结点\n") oneList.showList() }
posted on 2023-07-19 10:01 running-fly 阅读(8) 评论(0) 编辑 收藏 举报