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)
}

  

posted @ 2018-12-07 13:44  kosa  阅读(546)  评论(0编辑  收藏  举报