python单链表的基本实现——数据结构

class LNode:
    def __init__(self, elem, next_=None):
        self.elem = elem
        self.next = next_

class LinkedListUnderUnderflow(ValueError):
    pass

# 在表头插入元素
def insert_element_at_list_head():
    head = LNode(0)
    q  = LNode(13)
    q.next = head.next
    head = q
    print(head)


# 单链表的实现
def single_link_table():
    llist = LNode(1)
    p = llist
    for i in range(2, 11):
        p.next = LNode(i)
        p = p.next
    p = llist
    while p:
        # print(p.elem)
        p = p.next
    return llist

# 追加一个元素
def add_element(llist_, elem_):
     length = get_length_LList(llist)
     p = find_element_by_index(llist_, length - 1)
     n = LNode(elem_)
     p.next = n
     print(generate_LList(llist_))

# 通过下标定位元素
def find_element_by_index(llist_, index_):
    p = llist_
    if index_ < 0 or index_ > get_length_LList(llist_) - 1:
        raise LinkedListUnderUnderflow()

    while p and index_ > 0:
        p = p.next
        index_ -= 1
    if p:
        return p

# 通过元素定位元素
def find_element_by_element(p, elem_):
    counter = 0
    while p:
        if p.elem == elem_:
            return p
        counter += 1
        p = p.next
    return -1

# 删除表首元素    
def delete_element_in_table_head(llist):
    p = llist
    if p:
        p = p.next
        llist = p
    print(generate_LList(llist))

# 删除链表某一元素
def delement_element(llist_, index_):
    p = find_element_by_element(llist_, index_ - 1)
    if p:
        p.next = p.next.next
    print(generate_LList(llist_))

# 获取链表的长度
def get_length_LList(llist):
    counter = 0
    p = llist
    while p:
        counter += 1
        p = p.next
    return counter

# 遍历元素
def generate_LList(p):
    tem_list = []
    while p:
        tem_list.append(p.elem)
        p = p.next
    return tem_list

if __name__ == '__main__':
    llist = single_link_table()
    # find_element_by_index(llist, 9)
    # ret = find_element_by_element(llist, 22)
    # print(ret)
    # delete_element_in_table_head(llist)
    # delement_element(llist, 2)
    # find_element_by_index(llist, 3)
    # get_length_LList(llist) 
    add_element(llist, 12)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值