C语言单链表节点

单链表的头插入
L->next=NULL;
p->next=L->next;
L->next=p;
---------------------------------------
单链表的尾插入
L->next=NULL;
r=L;
p->next=NULL;
r->next=p;
r=p;
---------------------------------------
如何理解这每条语句的含义呢

单链表的头插入:  L是头结点, p是插入结点,

假设: 链表结构为 L->A->B...

L->next=NULL;   // 这条语句有问题, 头结点插入是不需要这句的, 否则.p->next=L->next就都等于null了;
p->next=L->next;   //p的下个结点指向头结点L的下个结点A, 即:p的下个结点指向原第2个结点A
L->next=p;  // 头结点L的下个结点指向p,  即将p插入到L的后面
// 最终结果为: L->P->A->B...

---------------------------------------
单链表的尾插入:L是尾结点,p是插入结点,r为标记末尾结点

假设: 链表结构为 ..A->B->L

L->next=NULL; //末尾结点没有下个结点, 即next指向null
r=L;           // r标记末尾结点
p->next=NULL;  // p待插入的末尾结点, 同样没有下个结点, next指向null
r->next=p;     // 将末尾结点r的下个结点指向p, 即:L下个结点指向p

r=p;           // 将r重新指向新的末尾结点p

//最终结果:A->B->L->P

追问

追答

你理解错了, L->next 是L指向它下个节点的指针. 而不是下个节点的名称叫next.
L->next=NULL; 是将next指针置为NULL, 即表示L节点没有next节点.
r=L: 是赋值, 表示r指针和L指针地址一样. 即r 和 L 都指向同一个节点.

追问

请问您可以加Q吗,大的就这两个插入法的问题,其中的小问题都是似懂非懂,

追答

公司不给上Q, 你自己多了解下节点指针的作用, next指针作用有点类似于画图中的箭头"--->"

追问

L->a->b->c
这L,a,b,c,就是结点对吧

追答

对, 就是这样.
L 下个节点为 a : 即用 L->next=a 来表达.
a 下个节点为 b: 即用 a->next=b 来表达.
如果c为末尾, 没有下个节点, 则用 c->next=NULL 来表达.

追问

也就是说:

L->next=a;说明,L是a的前一个结点;
那么
L->next=a->next;
怎么理解呢

追答

你要明白一个链表节点L是有两个指针, 一个L指向本身链表节点, 一个L->next指向下个链表节点.
所以r=L 是表示r 和L指向同一个链表节点, 而不是说r 指向L.
至于 r->next 是否设置为NULL; 需要看实际需求.

追问

那么r->next=p,实质是将L结点与p结点链接起来,从而使L->next=p,这样理解对吗

追答

不好意思, 有个地方说错了.

L->next=NULL;   // 这条语句没有问题,  这是链表只有1个L节点的情况
p->next=L->next;  
L->next=p;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-13
我觉得你对单链表链表的理解不是很正确唉

单链表一般都只有一个头指针(假设是L),插入新结点p
头插入:
p->next = L->next;
L->next = p;
尾插入:
r=head;
while(r->next!=NULL)
r=r->next;

p->next = r->next;
r->next = p;
呵呵,多看看数据结构那本书。。追问

我不理解的是
L->next=NULL;
p->next=L->next;
L->next=p;
这每条语句的含义,
您能给我解译一下吗

相似回答