[Python 数据结构与算法]单链表

节点只包含了一个数据项和对下一个节点的引用,定义一个单链表节点类如下:

class Node(object):
    def __init__(self,item):
        self.item=item
        self.next=None

单链表类的实现如下,包含:

is_empty():判断是否为空链表

length():链表长度

traverse():链表遍历

add():head添加item

append():尾部添加item

insert():其他任意位置添加item

remove():删除item

research():查找item是否存在

class LinkedList(object):
    def __init__(self):
        self.head=None
    def is_empty(self):
        return self.head==None
    def length(self):
        "链表长度"
        cur=self.head
        count=0
        while cur!=None:
            cur=cur.next
            count+=1
        return count
    def traverse(self):
        "遍历链表"
        cur=self.head
        while cur!=None:
            print(cur.item)
            cur=cur.next
        print("遍历结束")
    def add(self,item):
        "头部添加元素"
        node=Node(item)
        if self.is_empty():
            self.head=node
        else:
            node.next=self.head
            self.head=node
    def append(self,item):
        "尾部添加元素"
        node=Node(item)
        if self.is_empty():
            self.head=node
        else:
            cur=self.head
            while cur.next!=None:
                cur=cur.next
            cur.next=node
    def insert(self,pos,item):
        "指定位置添加元素"
        if pos<=0:
            self.add(item)
        elif pos>self.length():
            self.append(item)
        else:
            node=Node(item)
            count=0
            cur=self.head
            while count<pos-1:
                count+=1
                cur=cur.next
            "先将新的节点的node的next指针指向原来的cur的next"
            "将插入位置的前一个节点的next指向新的节点"
            node.next=cur.next
            cur.next=node

    def remove(self,item):
        "删除节点"
        cur=self.head
        pre=None
        while cur!=None:
            if cur.item==item:
                "第一个就是要删除的节点"
                if not pre:
                    self.head=cur.next
                else:
                    pre.next=cur.next
                break
            else:
                pre=cur
                cur=cur.next
    def search(self,item):
        "查找节点是否存在"
        cur=self.head
        while cur!=None:
            if cur.item==item:
                return True
            cur=cur.next
        return False
测试
if __name__ == "__main__":
    li= LinkedList()
    li.add(1)
    li.add(2)
    li.append(3)
    li.insert(2, 4)
    print("length:",li.length())
    li.traverse()







猜你喜欢

转载自blog.csdn.net/absent1353/article/details/79974645