Go数据结构(一)线性表·双链表

 方法:

type LinkedListDoubleMethods interface {
	LinkedListInsert(n int) bool
	LinkedListDelete(index int) bool
	DisplayLinkedList()
}

代码: 

package main

import "fmt"

type LinkedListDoubleMethods interface {
	LinkedListInsert(n int) bool
	LinkedListDelete(index int) bool
	DisplayLinkedList()
}
type DLNode struct {
	data  int
	prior *DLNode
	next  *DLNode
}

func (L *DLNode) LinkedListInsert(n int) bool {
	if L == nil {
		return false
	}
	for i := 0; i < n; i++ {
		s := &DLNode{data: i}

		s.next = L.next //将新节点的next指向当前节点的next 这个时候L和S都指向同一个节点
		if L.next != nil {
			L.next.prior = s //将L的下一个节点的头节点指向S 这个时候 L的下一个节点和S已经构成一个回路 这里应该注意一个空链表是没有这一步的
		}
		s.prior = L //s的前继节点指向L
		L.next = s  //L的next指向s 此时L和S构成一个回路

	}
	return true
}
func (L *DLNode) LinkedListDelete(index int) bool {
	temp := L
	for j := 0; j < index; j++ {
		temp = temp.next
		if temp == nil || temp.next == nil {
			return false
		}
	}
	temp.prior.next = temp.next
	temp.next = temp.prior.next
	return true
}
func (L *DLNode) DisplayLinkedList() {
	p := L.next
	for p != nil {
		fmt.Print(p.data, " ")
		p = p.next
	}
	fmt.Println()
}
func main() {
	var LinkedListDouble LinkedListDoubleMethods = &DLNode{}
	LinkedListDouble.LinkedListInsert(30)
	LinkedListDouble.DisplayLinkedList()
	fmt.Println(LinkedListDouble.LinkedListDelete(3))
	LinkedListDouble.DisplayLinkedList()

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值