Go语言(Golang)环形链表

package main

import (
	"fmt"
)

//环形链表测试用结构体
type TestNode struct {
	no int //编号
	name string //姓名
	next *TestNode
}

//环形链表插入
func InsertNod(head *TestNode, newNode *TestNode) {
	
	if head.next == nil {
		head.no = newNode.no
		head.name = newNode.name
		head.next = head
		return
	}

	temp := head
	for {
		if temp.next == head {
			break
		}
		temp = temp.next
	}
	temp.next = newNode
	newNode.next = head
}

//删除
func DelNode(head *TestNode, id int ) *TestNode {
	temp := head  //辅助节点指向链表头节点head
	helper := head  //辅助节点指向链表最后一个节点

	//判断链表为空
	if head.next == nil {
		fmt.Println("此链表为空!")
		return head
	}
	//判断只有一个节点,且这个节点的no编号等于id时删除
	if head.next == head && head.no == id {
		head.next = nil
		return head
	}

	//将helper指向链表最后一个节点
	for {
		if helper.next == head {
			break
		}
		helper = helper.next
	}

	flag := true
	for {
		if temp.next == head {
			break
		}
		if temp.no == id {
			if temp == head {
				head = head.next
			}
			helper.next = temp.next
			flag = false
			break
		}
		temp = temp.next
		helper = helper.next
	}

	if flag {
		if temp.no == id {
			helper.next = temp.next
		} else {
			fmt.Printf("无id为%d的值!",id)
		}
	}
	return head

}

//显示链表
func ListNode(head *TestNode) {
	temp := head
	if temp.next == nil {
		return
	}

	for {
		fmt.Printf("%d:%s\t",temp.no,temp.name)
		temp = temp.next
		if temp == head {
			break
		}
	}
}

func main() {

	head := &TestNode{}

	t1 := &TestNode {
		no : 1,
		name : "a",
	}

	t2 := &TestNode {
		no : 2,
		name : "b",
	}

	t3 := &TestNode {
		no : 3,
		name : "c",
	}
	InsertNod(head,t1)
	InsertNod(head,t2)
	InsertNod(head,t3)
	// head = DelNode(head,1)
	ListNode(head)
}

  

转载于:https://www.cnblogs.com/HouZhenglan/p/10082467.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值