8000 srlink: 删除功能实现 · home-coder/data-abstraction-001@f7727a3 · GitHub
[go: up one dir, main page]

Skip to content

Commit f7727a3

Browse files
author
oneface
committed
srlink: 删除功能实现
1 parent 927a4ac commit f7727a3

File tree

1 file changed

+44
-1
lines changed

1 file changed

+44
-1
lines changed

002-srlink.c

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,45 @@ static void srlink_insert(srlink_data **srldata, unsigned int loc, char data)
8888
srlp->next = nsrldata;
8989
}
9090

91+
static void srlink_delete(srlink_data **srldata, unsigned int loc)
92+
{
93+
int i;
94+
srlink_data *srlp = *srldata;
95+
if (!srlp) {
96+
printf("srlink is not exsit\n");
97+
return ;
98+
}
99+
100+
//head(0)->head(0); 0
101+
if (loc == 0 && srlp->next == *srldata) {
102+
free(*srldata);
103+
*srldata = NULL;
104+
printf("完全删除了整个srlink链表\n");
105+
return ;
106+
}
107+
108+
//head(0)->(1)...->head(0); 0
109+
if (loc == 0) {
110+
srlp = srlp->next;
111+
free(*srldata);
112+
*srldata = srlp;
113+
return ;
114+
}
115+
116+
//head(0)->(1)...->head(0); n
117+
for (i = 1; i < loc; i++) {
118+
srlp = srlp->next;
119+
if (srlp->next == *srldata) {
120+
printf("delete loc %d is invalid\n", loc);
121+
return ;
122+
}
123+
}
124+
srlink_data *desrlp = srlp->next;
125+
srlp->next = srlp->next->next;
126+
free(desrlp);
127+
desrlp = NULL;
128+
}
129+
91130
int main()
92131
{
93132
srlink_data *srldata;
@@ -102,8 +141,12 @@ int main()
102141
srlink_insert(&srldata, 2, 'e');
103142
srlink_insert(&srldata, 1, 'w');
104143
srlink_show(srldata);
144+
145+
srlink_delete(&srldata, 0);
146+
srlink_delete(&srldata, 1);
147+
srlink_delete(&srldata, 3);
148+
srlink_show(srldata);
105149
#if 0
106-
srlink_delete();
107150
srlink_amend();
108151
srlink_select();
109152
#endif

0 commit comments

Comments
 (0)
0