读书人

关于单链表的头安插和尾插入法

发布时间: 2013-07-11 15:38:46 作者: rapoo

关于单链表的头插入和尾插入法
最近在自学数据结构,下面是单链表头插入和尾插入的代码

typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}Lnode;

Lnode *createHead_LinkList(void)
{
int data;
Lnode *head,*p;
head=(Lnode *)malloc(sizeof(Lnode));
head->next=NULL;

while(1)
{
scanf("%d",&data);
if(data==32767) break;
p=(Lnode *)malloc(sizeof(Lnode));
p->data=data;
p->next=head->next;
head->next=p;
}
return head;
}

Lnode *createRear_LinkList(void)
{
int data;
Lnode *head,*p,*q;
head=p=(Lnode *)malloc(sizeof(Lnode));
p->next=NULL;
while(1)
{
scanf("%d", &data);
if(data==32767) break;
q=(Lnode *)malloc(sizeof(Lnode));
q->data=data;
q->next=p->next;
p->next=q;
p=q;
}
return head;
}

我不太清楚这几行代码是如何完成插入的。求解释
p->next=head->next;
head->next=p;

 q->next=p->next;
p->next=q;
p=q;


[解决办法]
打错了..
p->next=head->next; //p->next指向head后面的结点


head->next=p;
每次添加的元素都插入到头结点的后面(头插法)
q->next=p->next; //q->next=NULL
p->next=q; //把q插入到链表末尾
p=q; //p指向链表末尾结点
每次添加的元素都插入到链表的末尾(尾插法)
[解决办法]


头插入

[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]

|0|是头结点head
p->
[解决办法]
n
[解决办法]
->NULL;新建结点,next没有指向,暂时认为NULL,把p插入到0a之间

p->next = head->next
p

[解决办法]


[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]


head->next = p

[解决办法]
0
[解决办法]
->p

[解决办法]


[解决办法]
a
[解决办法]
->
[解决办法]
b
------解决方案--------------------





[解决办法]
0
[解决办法]
->|n|->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]



末尾插入

[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]
->NULL
|0|是头结点head;p->
[解决办法]
b
[解决办法]
;p->next = NULL
q->
[解决办法]
n
[解决办法]
->NULL;新建结点,next没有指向,暂时认为NULL,把q插入到p之后

q->next = p->next;
p q

[解决办法]

[解决办法]


[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]
->NULL

p->next = q;

p -> q



[解决办法]

[解决办法]


[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]
NULL

p = q;//因为p要始终指向最后一个结点,前面插入一个后,p就要后移
p

[解决办法]


[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]
->
[解决办法]
n
[解决办法]
->NULL



我是在回复框内编辑的内容,不知道提交后会不会错位。
总之,要理解思想,我简单的模拟下,应该能理解。自己画拉下就明白了。

读书人网 >C语言

热点推荐