关于单链表的头指针、头结点、尾结点的问题

gzrjzcx 2017-12-09 01:11:34
如题,对于单链表的头指针、头结点、和尾结点一直有点概念模糊。

```
void CreateListR(ListNode* &L, int a[], int n)
{
L = (ListNode *)malloc(sizeof(ListNode));
L->next = nullptr; //建立空表
ListNode *s;
ListNode *r; //指向尾端结点
r = L;

for (int i = 0; i < n; i++)
{
s = (ListNode *)malloc(sizeof(ListNode));
s->data = a[i];
r->next = s;
r = s;
}
r->next = nullptr; //最后将r->next置为nullptr
}
```

当我用如上尾插法建立一个单链表的时候,
```
int a[5] = {1,2,3,4,3};
ListNode *L;
CreateListR(L, a, 5);
```

最后得到的单链表是不是如图所示:

就是有一个头结点,其不为nullptr,但是没有存data,最后r->next = nullptr;这是将最后一个有值的结点的next指针指向了一个nullptr,所以是不是其实最后还有一个尾结点,这个结点为nullptr,但是如果统计结点的时候其实它也是一个结点的存在?

另外,当我创建好了单链表过后,如果我其他函数需要用到该表,例如:
```
int ListLength(ListNode* L)
{
int length = 0;
ListNode *p = L;
while (p->next != nullptr)
{
length++;
p = p->next;
}
return length;
}
```

我传入的L是不是之前创建的链表的头结点(就是没有存储data,next指针指向第一个真正存储data的那一个结点)?

...全文
797 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-12-11
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
gzrjzcx 2017-12-10
  • 打赏
  • 举报
回复
什么方法- - 这些都是最基本的数据结构了 网上都有的

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧