-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path链表.cpp
96 lines (88 loc) · 1.6 KB
/
链表.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include<iostream>
#include<malloc.h>
typedef struct list{
int base;
list* next;
}node,*pnode;
pnode Creatlist(void){
pnode head=(pnode)malloc(sizeof(node));
head->next=NULL;
return head;
}
void Addlist(pnode p,int a){//从前插入
pnode pnew=(pnode)malloc(sizeof(node));
pnode pn=p;
pnew->base = a;
pnew->next = pn->next;
pn->next= pnew;
}
void addlist(pnode p,int len,int a){//指向插入
int c=0;
pnode pn = p;
while(p != NULL && c < len-1 ){
pn = pn->next;
c++;
}
pnode pnew = (pnode)malloc(sizeof(node));
pnew->base = a;
pnew->next = pn->next;
pn->next = pnew;
}
pnode findlist(pnode p,int a){
pnode pn = p;
int len = 0;
while(pn != NULL && pn->base != a){
pn = pn->next;
len++;
}
if(pn ==NULL)
printf("找不到。");
else
printf("%d",len);
printf("\n");
return pn;
}
void putlist(pnode p){
pnode pn = p->next;
if( pn == NULL)
printf("链表为空。");
while(pn != NULL){
printf("%d ",pn->base);
pn = pn->next;
}
printf("\n");
}
void deletelist(pnode p){//全删
pnode pn,pnew;
pn = p->next;
p->next = NULL;
while(pn != NULL){
pnew = pn->next;
free(pn);
pn = pnew;
}
}
void Deletelist(pnode p,int a){//指向删除
int len = 0;
pnode pn = p;
while(pn != NULL && len<a-1){
pn = pn->next;
len++;
}
pnode pnew = pn->next;
pn->next = pnew->next;
free(pnew);
pnew = NULL;
}
int main(){
pnode lists = Creatlist();
for(int c=1;c<10;c++){
addlist(lists,c,c);
}
putlist(lists);
findlist(lists,5);
Deletelist(lists,5);
putlist(lists);
deletelist(lists);
putlist(lists);
}