单链表(C++)

数据结构(C++)单链表构造的前插方式与后接方式详解

无参构造函数:

先上代码:

//模板类实现
template<class T>
LinkList<T>::LinkList()
{
	first = new Node<T>;
	first->next = NULL;
}

这里不难看到,无参构造函数只是简单的构造了头节点:需要注意的是头节点只是标志了单链表的开始部分,不存储数据元素
在这里插入图片描述

前插方式建立单链表:

//模板类
template<class T>
LinkList<T>::LinkList(T a[], int n)//前插方式建立单链表
{
	first = new Node<T>;
	Node<T>* s;
	first->next = NULL;
	for (i = 0; i < n; i++)
	{
		s = new Node<T>;
		s->data = a[i];
		s->next = first->next;
		first->next = s;

	}
}

前插方式建立单链表的实现可以用图来清楚表示:(很容易理解)
在这里插入图片描述

后接方式建立单链表:

在说明这个问题之前,我们先来了解一下为什么要实现后接方式建立单链表:

从单链表的代码实现不难看出,单链表每次插入数据都是在头结点之后,在上一次插入的数据元素之前,这样就会使得对从头指针开始顺链访问单链表元素结点所得到的数据次序和扫描输入数据的次序相反,即你输入的数据为{1,2,3,4,5,6,7},然而你遍历链表得到的数据会是{7,6,5,4,3,2,1},有时我们并不想要得到这样的输出结果,所以就有了后接方式建立单链表的方式。

//模板类
template<class T>
LinkList<T>::LinkList(int n, T a[])//后接方式建立单链表
{
	first = new Node<T>;
	first->next = NULL;
	Node<T>* r = first;
	for (i = 0; i < n; i++)
	{
		s = new Node<T>;
		s->data = a[i];
		r->next = s;
		r = s;
	}
	r->next = NULL;
}

用图来解释更为简单:
在这里插入图片描述

简单解释一下:多定义一个尾指针r,目的就是为了插入可以沿着新建立的元素往后插入,在插入的过程中尾指针 r 会一直指向最后插入的结点,这样的建立单链表方式就不会出现前插方式建立单链表所出现的逆置结果。

如有纰漏,望指正,多谢!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值