标签:
struct node
{
int elem;
node* next;
};
void difference(node** LA , node* LB)
{
node
*pa , *pb , *pre , *q;
pre = NULL;
1
//1
while(pa) {
pb = LB;
while
2
//2
pb = pb->next; //做题目有点要首先注意:while的循环、for、if没有加括号!!!
if
3
//3
{
if(!pre)
*LA =
4
;
//4
else
5
= pa->next;
//5
q = pa;
pa = pa->next;
free(q);
}
else {
6
; //6
pa = pa->next;
}
}
}
单链表是一种最为基本的数据结构,常用的单链表又分为带头结点和不带头结点两种。从线性表的定义可以知道,线性表要求允许在任意位置进行插入和删除操作。所有的链表都有一个头指针head, 带头结点的链表中head的数据项为空 。而不带头的直接在头节点存入数据,那么当从头插入数据时,要注意,head是时刻变化的!!!
接下来具体分析。
1.带头节点的链表的插入, 首先使用临时变量p等于要插入之前的节点(不管具体的插入位置) ,之后不管要插入的节点x是插到链表头还是插到链表的其他位置都是如下语句: x->next = p->next;p->next = x;
2.不带头结点的链表的插入, 若要插到链表的开头则
x->next = head->next;
head = x;//这里不再是head->next = x
若插到链表的其他位置则
p = 插入之前的节点
x->next = p->next;
p->next = x;
3.带头结点的链表的删除, 不解释,同样不存在删除位置的差异。
4.不带头结点的链表的删除,删除第一个节点时,head=head->next。删除其他节点时,head的值不会改变。
综上所述,带头节点的单链表,不论删除和插入的位置如何,不需要修改head的值,不带头结点的单链表则需要修改head的值。所以单链表一般为带头结点的单链表。
牛客之错题(2016.1.15) && 带头节点与不带头的区别
标签:
原文地址:http://www.cnblogs.com/neversayno/p/5132539.html