实现单向链表节点删除

392人阅读 评论(0)

#include <stdio.h>
#include <stdlib.h>

typedef struct Integer{
int num;
struct Integer *next;
}Node, *Linklist;


Node* create_list(const int n)
{
Linklist head,p1,p2;

head = NULL;
printf("Please input the element\n");

for(int i=0; i<n; ++i){
p1 = (Linklist)malloc(sizeof(Node));
scanf("%d",&p1->num);

if(head == NULL)     //Without the lead node
head = p1;
else
p2->next = p1;
p2 = p1;
}
p1->next = NULL;
return head;
}


void print_list(Linklist p)
{
while(p){
printf("%d ",p->num);
p = p->next;
}
printf("\n");
}


void delete_list(Linklist head, int key)
{
Linklist p1,p2;
p1 = head;
p2 = NULL;
if(p1){
if(p1->num == key){      //If to delete the firest node.
head = head->next;
free(p1);
print_list(head);
}
else{
for(p1=head,p2=p1->next; p2!=NULL,p2->num!=key; p1=p1->next,p2=p2->next);  //Using two nodes to traverse the list,until to find the element to be deleted.
if(p2 != 0){
p1->next = p2->next;
free(p2);
print_list(head);
}
}
}
}


int main(int argc, char* argv[])
{
int n,key;
Linklist q = NULL;

printf("Please the number of node you want to create:\n");
scanf("%d",&n);

q = create_list(n);
print_list(q);

printf("Please input the number you want to delete:\n");
scanf("%d",&key);
delete_list(q,key);

return 0;
}


﻿﻿
0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：140956次
• 积分：4721
• 等级：
• 排名：第6112名
• 原创：330篇
• 转载：54篇
• 译文：0篇
• 评论：16条
博客专栏
 STL源码剖析 文章：3篇 阅读：921
 libevent源码剖析 文章：6篇 阅读：4908
 muduo源码剖析 文章：28篇 阅读：10005
阅读排行