python链表 —— 有头结点和没有头结点的区别

本文探讨了Python链表中带头结点和不带头结点的区别。带头结点的链表头指针指向包含空信息的头结点,而无头结点链表的头指针直接指向数据结点。头结点的存在简化了空链表和非空链表的处理,便于开始结点的增删操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不论是带头结点的链表还是不带头结点的链表,头指针head都指向链表中的第一个结点。如果该链表有头结点,则头指针head指向头结点,如果没有头结点,则头指针head指向链表的第一个节点。

1 带头结点的单链表中头指针head指向头结点,头结点的值域不含任何信息,从头结点的后继结点开始存储信息。头指针head始终不等于NULL,head->next等于NULL的时候链表为空。

2 不带头结点的单链表中的头指针head直接指向开始结点,当head等于NULL的时候链表为空。

头结点的存在,使得空链表与非空链表的处理变得一直,也方便了对链表的开始结点插入或删除操作。

不带头结点的实现如下:

class ListNode:
    def __init__(self, value=None, next=None):
        self.data = value
        self.next = next
 
 
def creat_List(l, n):
    l.data = int(input())
    p = l
    for i in range(n-1):
        node = ListNode()
        node.data = int(input())
        p.next = node
        p = p.next
    
    p.next = None
    
def length(l):
    p = l
    len = 0
    while p:
        len += 1
        p = p.next
    return len
 
# 链表逆转
def reverse(l):
    res = pre = None
    p = l
    while p:
        pre = p.next
        p.next = res
        res = p
        p = pre
    return res 
 
def traverse(l):
    p = l
    while p:
        print(p.data, ' ', end='')
        p = p.next
    
    print()
 
if __name__ == '__main__':
    l = ListNode()
    creat_List(l, 5)
    traverse(l)
    ll = reverse(l)
    traverse(ll)
    traverse(l)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值