问题描述
- 单链表的头指针和头结点问题??
-
Status InitList(LinkList L)
{ / 操作结果:构造一个空的线性表L /
*L=(LinkList)malloc(sizeof(struct LNode)); / 产生头结点,并使L指向此头结点 /
if(!*L) / 存储分配失败 /
exit(OVERFLOW);
(*L)->next=NULL; / 指针域为空 */
return OK;
}它是怎么实现将L指向此头结点的???
解决方案
1、L是一个指针变量,那么下面这句就是错误的:
*L=(LinkList)malloc(sizeof(struct LNode));
2、你申请的头结点地址赋给了L, 无法返给调用函数使用
可以修改为:
Status InitList(LinkList &L)
{ / 操作结果:构造一个空的线性表L /
L=(LinkList)malloc(sizeof(struct LNode)); / 产生头结点,并使L指向此头结点 /
if(L) / 存储分配失败 /
return FALSE;
L->next=NULL; / 指针域为空 */
return OK;
}
解决方案二:
线性链表中的头结点和头指针
头指针和头结点的区别
线性表---单链表(头结点与头指针)
解决方案三:
请问以下这段程序中,head是头指针还是头结点???我一直搞不明白啊
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}Linklist;
Linklist *create() //创建链表,带头结点
{
Linklist *head;
head = (Linklist *)malloc(sizeof(Linklist));
head->next = NULL;
return head;
}
Linklist *tail_insert(Linklist *head, int value) //尾插法
{
Linklist *p, *t;
t = head;
p = (Linklist *)malloc(sizeof(Linklist));
p->data = value;
while (t->next != NULL) //当链表不为空时t向后移动
t = t->next;
t->next = p;
p->next = NULL;
return head;
}
Linklist *display(Linklist *head) //打印链表数据
{
Linklist *p;
p = head->next;
if (p == NULL)
{
printf("linklist is empty...
");
return head;
}
while (p != NULL)
{
printf("%5d", p->data);
p = p->next;
}
printf("
");
return head;
}
int main()
{
Linklist *head;
int i, num;
head = create();
printf("tail_insert:
");
for (i = 2; i<20; i = i + 4)
tail_insert(head, i);
display(head);
system("pause");
return 0;
}
解决方案四:
head是头指针,head指向的是头结点,即*head
这个链表的头结点并没有存储数据,也就是说不是有效结点。
它的作用是为了插入、删除结点时处理统一,不需要判断是不是头结点。
时间: 2024-08-04 07:47:15