# 【从零开始的嵌入式生活】数据结构3——线性表及链表（2）

## 6.链表的删除

int list_delete(linklist H, int pos){
//1 H is NULL?
if (H == NULL){
puts("H is NULL");
return -1;
}
//2 locate prior
p = list_get(H, pos - 1);
if (p == NULL)  return -1;
else if (p->next == NULL){
puts("delete pos is invalid");
return -1;
}
//3 update list
q = p->next;
p->next = q->next;
//4 free
printf("free:%d\n", q->data);
free(q);
q = NULL;
return 0;
}

## 7.链表释放

linklist list_free(linklist H){
if (H == NULL)
return -1;
p = H;
printf("free:");
while (H != NULL){
p = H;
H = H->next;
printf("%d ", p->data);
free(p);
}
puts("");
return 0;
}

# 链表应用举例

## 1.单链表H倒置

int list_reverse(linklist H){
if (H == NULL){
puts("H is NULL");
return -1;
}
if (H->next == NULL || H->next->next == NULL){
return 0;
}
p = H->next->next;
H->next->next = NULL;
while(p){
q = p;
p = p->next;//get a node
q->next = H->next;
H->next = q;
}
return 0;
}

## 2.链表求两个相连结点最大值

linklist list_adjmax(linklist H, data_t *value){
if(H == NULL){
puts("H is NULL");
return NULL;
}
if(H->next == NULL || H->next->next == NULL || H->next->next->next == NULL){
return H;
}
q = H->next;
p = H->next->next;
r = q;
int sum = q->data + p->data;
while(p->next != NULL){
p = p->next;
q = q->next;
if(sum < q->data + p->data){
sum = q->data + p->data;
r = q;
}
}
*value = sum;
return r;
}

## 3.有序链表的合并

int list_merge(linklist H1, linklist H2){
if (H1 == NULL || H2 == NULL){
printf("H1 || H2 is NULL\n");
return -1;
}
p = H1->next;
q = H2->next;
r = H1;
H1->next = NULL;
H2->next = NULL;
while(p && q){
printf("%d\n",p->data);
if (p->data <= q->data){
r->next = p;
p = p->next;
r = r->next;
r->next = NULL;
}
else{
r->next = q;
q = q->next;
r = r->next;
r->next = NULL;
}
}
if (p == NULL){
r->next = q;
}
else {
r->next = q;
}
return 0;
}

# 写在最后

|
6天前
【数据结构OJ题】环形链表

14 3
|
6天前
【数据结构OJ题】复制带随机指针的链表

13 1
|
6天前
【数据结构OJ题】环形链表II

10 1
|
6天前
【数据结构OJ题】相交链表

14 1
|
6天前
|

【7月更文挑战第21天】
19 2
|
13天前
【数据结构OJ题】链表分割

12 0
|
1月前
|

【数据结构与算法 经典例题】使用栈实现队列（图文详解）
【数据结构与算法 经典例题】使用栈实现队列（图文详解）
36 0
|
6天前
|

【数据结构】栈和队列

12 1
|
6天前
【数据结构OJ题】用栈实现队列

14 0
|
6天前
【数据结构OJ题】用队列实现栈

17 0