单链表python和go的代码
go version
package main import "fmt" type Objecter interface {} //任意对象类型 type Node struct{ Data Objecter Next *Node //指针类型 } type List struct { headNode *Node } //判断是否为空的单链表 func (l *List) IsEmpty() bool { if l.headNode == nil{ return true }else{ return false } } //单链表的长度 func (l *List) Length() int{ cursor :=l.headNode count := 0 for cursor != nil{ count++ cursor = cursor.Next } return count } //获取头部节点 func (l *List) GetHeadNode() *Node{ return l.headNode } //从头部添加元素 func (l *List) Add (data Objecter){ node:=&Node{Data:data} //传入值转为node对象 node.Next = l.headNode //将节点的next指针指向head即可。 l.headNode = node //再把当前的节点指向head,也就是head前移了 } //从尾部添加元素 func (l *List) Append (data Objecter){ //首先根据传入的值转成node节点 node := &Node{Data:data} //判断是否为空 if l.IsEmpty(){ //将head指向当前的节点 l.headNode = node }else{ cursor:=l.headNode for cursor.Next!=nil{ //游标往后元素移动 //知道下个 cursor = cursor.Next } cursor.Next = node } } //在指定位置添加元素 func (l *List) Insert(index int,data Objecter){ if index <0 { //如果index小于0,加在头上 l.Add(data) }else if index > l.Length(){ l.Append(data) }else{ pre :=l.headNode count:=0 for count<(index-1){ pre = pre.Next count++ } node :=&Node{Data:data} //pre.Next表示需要插入位置的下一个节点 //node.Next指向后面的节点 //然后前面的节点指向node node.Next = pre.Next pre.Next = node } } func (l *List) Remove(data Objecter){ pre := l.headNode if pre.Data ==data{ l.headNode = pre.Next }else{ for pre.Next != nil{ if pre.Next.Data ==data{ pre.Next = pre.Next.Next }else{ pre = pre.Next } } } } func (l *List) Contain(data Objecter) bool { cursor:=l.headNode for cursor!=nil{ if cursor.Data ==data{ return true } cursor = cursor.Next } return false } func traverseLinkList(l *List){ head:=l.GetHeadNode() for head!=nil{ fmt.Println(head.Data) head = head.Next } fmt.Println("======") } func main() { list := List{} //尾部添加 list.Append(1) list.Append(2) list.Append(3) list.Append(4) //头部添加 list.Add(5) fmt.Println("长度===",list.Length()) //判断是否为空链表 bool:=list.IsEmpty() fmt.Println(bool) //在指定位置2插入23 list.Insert(2,23) traverseLinkList(&list) //是否包含元素23 isContain :=list.Contain(23) fmt.Println("isContain: ",isContain) //是否包含元素57 isContain =list.Contain(57) fmt.Println("isNotContain: ",isContain) //删除57 list.Remove(23) traverseLinkList(&list) }
python version
class Node: def __init__(self,value=None): self.value = value self.next = None class LinkList: def __init__(self,head = None): self.head = head def is_empty(self): """ 判断链表是否为空 """ flag = False pre = self.head if pre.value is None: flag = True return flag def length(self): """ 获取链表的长度 """ cursor = self.head count = 0 while cursor is not None: cursor = cursor.next count+=1 return count def get_head_node(self): """ 获取头部节点 """ return self.head def add(self,value): """ 从头部添加元素 """ node = Node(value =value) node.next = self.head self.head = node def append(self,value) : """ 从尾部添加元素 """ node = Node(value = value) cursor = self.head if self.head is None: self.head = node else: while cursor.next is not None: cursor = cursor.next cursor.next = node def insert(self,index,value): if index < 0: self.add(value) elif index > self.length(): self.append(value) else: count = 0 cursor = self.head while count < index -1: cursor = cursor.next count+=1 node = Node(value = value) # cursor.next = node.next # node = cursor.next node.next = cursor.next cursor.next = node def remove(self,value): cursor = self.head if cursor.value == value: self.head = cursor.next else: #判断next的值比较好 while cursor.next is not None: if cursor.next.value==value: cursor.next = cursor.next.next else: cursor = cursor.next #如果使用cursor则需要知道前面的节点是什么。 # pre = None # while cursor is not None: # curosr = cursor.next # pre = cursor # if cursor.value==value: # pre.next = cursor.next def contains(self,value): cursor = self.head flag = False if cursor.value == value: flag = True else: while cursor is not None: if cursor.value == value: flag = True break else: cursor = cursor.next else: flag = False return flag def traverse_list(self): head = self.get_head_node() cursor = head while cursor is not None: print(cursor.value) cursor = cursor.next print("traverse_over") def main(): l = LinkList() l.append(1) l.append(2) l.append(3) l.append(4) l.add(5) print("长度===",l.length()) #判断是否为空链表 bool=l.is_empty() print(bool) #在指定位置2插入23 l.insert(2,23) l.traverse_list() #是否包含元素23 is_contain =l.contains(23) print("is_contain: ",is_contain) #是否包含元素57 is_contain =l.contains(57) print("is_not_contain: ",is_contain) #删除23 l.remove(23) l.traverse_list() if __name__ == "__main__": main()
相关推荐
kka 2020-09-14
成长共勉 2020-05-19
ipqtjmqj 2020-05-19
boneix 2020-10-21
seanzed 2020-10-15
ifconfig 2020-10-14
学留痕 2020-09-20
往后余生 2020-09-17
redis 2020-09-07
lzccheng 2020-09-06
soyo 2020-08-31
stonerkuang 2020-08-18
LxyPython 2020-08-17
raksmart0 2020-08-17
Lzs 2020-08-14
MrHaoNan 2020-07-31
80530895 2020-07-05
lengyu0 2020-06-28