一、单链表基本操作
(1)清空单链表
while(L->next){
p=L->next;
L->next=p->next;
free(p);
}
分析:p 指向L的 next 域,L的 next域 在指向 p 的 next 域(p=L->next),其实就是L指向了 L 的 next 的 next 域.然后清空 p
不断循环,知道 L->next == NULL
(2)销毁单链表
while(L){
p=L->next;
free(L);
L=p;
}
(3)单链表判断是否为空
if(L->next==NULL)
return TRUE;
else
return FALSE;
(4)求单链表的表长
int ListLength(LinkList L){
p=L->next;
i=0;
while(p){
i++;
p=p->next;
}
return i;
}
(5)单链表中如何查找元素
p=L->next;
i=1;
while(p && p->data!=e){
p=p->next; i++;
}
if(p){
return i;
}
else{
return 0;
}
分析:从第一个结点开始搜索,搜索成功,返回位序;否则,返回0
二、逆序建立单链表
分析:
- 建立一个带头结点的空单链表
- 输入数据元素ai,建立新结点p,并把p插入在头结点之后成为第一个结点。
- 重复执行第2步,直到完成单链表的建立。
代码如下:
void CreateList_N(LinkList &L, int n) {
// 逆序输入 n 个数据元素,建立带头结点的单链表
L = (LinkList) malloc (sizeof (LNode));
L->next = NULL;
for (i = 1; i <=n; i++) {
p = (LinkList) malloc (sizeof (LNode));
scanf(&p->data); // 输入元素值
p->next = L->next; L->next = p; // 插入
}
三、顺序建立单链表
分析:
- 建立一个带头结点的空单链表
- 输入数据元素ai,建立新结点,并把其插入在尾结点p之后成为最后一个结点
- 重复执行第2步,直到完成单链表的建立
代码如下:
L = (LinkList) malloc (sizeof (LNode));
L->next = NULL;
p=L;
for(i=1;i<=n;i++){
q=(LinkList)malloc(sizeof(LNode));
scanf(&q->data);
q->next=p->next;
p->next=q;
p=q;
}
时间: 2024-12-25 20:28:49