无头结点单链表 在头指针处插入元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无头结点单链表 在头指针处插入元素相关的知识,希望对你有一定的参考价值。
typedef struct LNode
int data; //数据域
struct LNode *next; //指针域
LNode, *Linklist;
void insert(Linklist L)
Linklist p,s;
int j,pos,e;
printf("请分别输入插入的结点位置和数据:");
scanf("%d %d",&pos,&e);
p=L; j=0;
if(pos==1)
s=(Linklist)malloc(sizeof(LNode));
s->data=e;
s->next=p;
p=s;
else
while(p && j<pos-1)
p=p->next; ++j;
if(!p||j>pos-1)
exit(-1);
s=(Linklist)malloc(sizeof(LNode));
s->data=e;
s->next=p-> next; p->next=s;
printf("insert is ok\n");
请问if(pos==1)
。。。
这一段代码是不是有什么问题,为什么执行时不能在第一个节点位置插入元素~?
解决办法:一、
if(pos==1)
s=(Linklist)malloc(sizeof(LNode));
s->data=e;
s->next=p;
p=s;
return p; //返回p作为新的表头。
二、直接修改原来的表头。
当然这个就涉及到指针的指针,可能不太好理解,建议就用上一种方法吧。
ps:如果想想避免这样的问题,在建立链表时,采用带头结点链表,即第一个结点不存数据。
希望能对你有所帮助。追问
我也想加头结点啊 老师布置的题目就不让用头结点 TAT
你说的应该是对的 但是我加上return p之后,输出的仍然是插入之前的情况
LinkList NewL,p;
p=NewL=insert( L);
while(p)
printf("%d",p->data);
p=p->next;
这样肯定能输出 的
void insert( list **H, node *P)//要使用指针的指针,来改变链表头指针
p->next = *H;
*H = p;
追问
能再详细一点吗? 结合我发的代码,我应该怎么改?
追答函数定义成void insert(Linklist *pl)
...
p = *pl;
if(pos==1)
s=(Linklist)malloc(sizeof(LNode));
s->data=e;
s->next=*pl;
*pl=s;
...//其他不变
插入后输出的元素个数没有增加,且第一个元素变成了随机数。。。。。。
追答你调用insert的时候记得取地址了吧
比如链表是Linklist L
那么要调用insert( &L, ...
Node *newHead = new Node;
newHead->next = head;
head = newHead;追问
。。。。和我这个有差吗?
以上是关于无头结点单链表 在头指针处插入元素的主要内容,如果未能解决你的问题,请参考以下文章