zoukankan      html  css  js  c++  java
  • 单链表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()
                                  
    
  • 相关阅读:
    什么是字典序算法?
    安装使用zookeeper
    用最快速度将0*10范围内的数进行排序
    自定义schema 流程
    dubbo原理
    jvm 线上命令
    如何实现抢红包算法?
    GC Root 对象有哪些
    Jquery动态绑定事件处理函数 bind / on / delegate
    找出数组中的最小值(es5/es6)
  • 原文地址:https://www.cnblogs.com/c-x-a/p/12243746.html
Copyright © 2011-2022 走看看