删除结点
在链表中,删除一个结点之后需要:
1.修复链接
2.释放空间
释放空间在C语言中就是free()
下面来看释放空间:
我们的思想是用一个指针指向待被删除结点,然后释放
所以,与任意位置插入相似,需要三个指针:head(保留头部信息)、temp1(寻找,也就是遍历)、temp2(进行删除操作)。
void Delete(int n) {
struct Node* temp1 = head;
if (n == 1) {
head = temp1->next;
free(temp1);
}
else {
int i;
for (i = 1;i < n - 1;i++)
temp1 = temp1->next;
struct Node* temp2 = temp1->next;
temp1->next = temp2->next;
free(temp2);
}
}
for (i = 1;i < n - 1;i++)
temp1 = temp1->next;
这里再次用到这段代码,使得temp1正好在指向第n-1(待删除结点前一个结点)停止。
之后新建temp2,指向待删除结点,再用temp1指向下一节点(待删除结点后一结点),即可在链表中删除,最后再进行释放操作。**注意:**即使第n+1个结点为空也可以。