py单链表头插法与尾插法实现(含代码测试)

本博文源于《程序设计竞赛入门》,主要针对单链表头插法和尾插法的思想进行理解与代码演示。

一、实验原题–请实现单链表的头插法与尾插法

实验输入:输入创建链表节点个数,并分别输入其中的Data,最后输出
实验输入输出

Input:
3 2 5 3

Output:
2 5 3
3 5 2

实现效果:
在这里插入图片描述

二、头插法实现原理及代码

2.1 头插法思想

头插法的含义是指,新节点链接到头结点之后,第一个数据结点之前,所得链表为逆序链表。

  • 建立一个空链表,仅包含一个头结点由头指针head指向,其数据域为-1,指针域为空值。
  • 将新结点由指针p指向,并把结点链接到第一个数据结点
  • 重复第二步,直到所有数据结点都插入到链表中。

2.2 头插法代码

def createByFront(a):
    head = Node(-1)
    for i in range(len(a)):
        p = Node(a[i])
        p.next = head.next
        head.next = p
    return head

2.3 尾插法思想

尾插法就是将新结点接到尾之后,所得链表称为顺序链表。

  • 建立一个空链表,仅包含一个头结点由头指针head指向,其数据域为-1,指针域为None,同时该结点用一个尾指针tail指向

  • 将申请新结点由指针p指向并链接到尾指针tail所指结点之后

  • 把指针p指向的新结点置为新的尾结点

2.4 尾插法代码

def createByTail(a):
    head = Node(-1)
    tail = head
    for i in range(len(a)):
        p = Node(a[i])
        tail.next = p
        tail = p
    return head

三、完整代码

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

def createByTail(a):
    head = Node(-1)
    tail = head
    for i in range(len(a)):
        p = Node(a[i])
        tail.next = p
        tail = p
    return head



def createByFront(a):
    head = Node(-1)
    for i in range(len(a)):
        p = Node(a[i])
        p.next = head.next
        head.next = p
    return head


def output(head):
    p = head.next
    while p!= None:
        if p!=head.next:
            print(' ',end='')
        print(p.data,end='')

        p = p.next
    print()


if __name__ == '__main__':
    a = list(map(int,input().split()))
    n = a[0]
    a = a[1:]
    h = createByTail(a)
    output(h)
    h = createByFront(a)
    output(h)

四、总结与反思

在头插法与尾插法中,头插法讲究的是将新结点连接在头结点之后,第一个数据点之前。逆序输出。尾插法讲究的是链接到尾结点之后,所得链表称为顺序链表。因此,紧扣住定义,将代码多次演练即可掌握,实在是不可多得的好文章。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值