Sample Input
10
1 2 3 4 5 6 7 8 9 10
5
Sample Output
1 2 3 4 6 7 8 9 10
#include <stdio.h>
#include <malloc.h>
////定义单链表结构体,包括一个数据域和一个指针域
typedef struct link_node_s{
int data;
struct link_node_s *next;
} link_node_t,*link_list_t;
//创建单链表
link_list_t create_linklist(int n)
{
int i;
link_node_t *head ,*head_p,*new_node;
//printf("线性表的长度..\n");
//申请一个头结点的空间
head = (link_list_t) malloc(sizeof(link_node_t));
head->next=NULL;//头指针为空
head_p = head;//头指针不变化
for(i=1;i<n;i++)
{
new_node =(link_list_t) malloc(sizeof(link_node_t));
scanf("%d ",&new_node->data);
new_node->next=NULL;//新插入的结点指针域为空
head_p->next=new_node;//所指结点与新插入的结点new链接
head_p = new_node;//p所指向的位置是最后一个节点
if(i==n)
break;
}
//最后一个数
new_node =(link_list_t) malloc(sizeof(link_node_t));
scanf("%d",&new_node->data);
new_node->next=NULL;
head_p->next=new_node;
head_p = new_node;//p所指向的位置是最后一个节点
return head;
}
//查找链表指定的位置
int search_list(link_list_t L,int i)
{
int j=0;
link_list_t link_p;
link_p = L;
while(link_p->next!=NULL && j<i)//查找i个元
{
link_p=link_p->next;
j++;
}
if(j == i)
{
return 1;
}
else{return 0;}
}
//插入链表指定位置
//后插操作的时间复杂度为O(1),
//设link_p指向单链表中某节点,new_node指向待插入的值为x的新节点,将*new_node插入到*link_p的后面。
int inser_list(link_list_t L,int i,int data)
{
link_list_t link_p,new_node;
int j=0;
link_p = L;
new_node =(link_list_t) malloc(sizeof(link_node_t));
new_node->data = data;
while(link_p->next!=NULL && j<i)//查找i个元
{
link_p=link_p->next;
j++;
}
if(j == i)
{
new_node->next = link_p->next;
link_p->next =new_node;
return 1;
}
else{return 0;}
}
//指定 除单链表中某个数据,并统计 除此数据的个数
int Delete_2(link_list_t head, int Delete_data)
{
int count = 0;
link_list_t p = head, q;
while(NULL != p->next)
{
q = p->next;
if(q->data == Delete_data)
{
p->next = q->next;
free(q);
++count;
}
else
{
p = q;
}
}
return count;
}
// 除第i个结点,或者说是第i个元
int delet_list(link_list_t L,int i)
{
link_list_t link_p,link_q;
int j =00;
link_p = L;//从头结点开始查找
//如果 除第一个节点
if(i == 1)
{
link_q=link_p->next;
link_p->next=link_q->next;
free(link_q);
return 1;
}
while(link_p->next!=NULL && j<i-1)//查找i-1个元
{
link_p=link_p->next;
j++;
if(j == i-1)
{
//p指向第i-1个元 ,q指向第i个元 , 除q
link_q=link_p->next;
link_p->next=link_q->next;
free(link_q);
return 1;
}
else{return 0;}
}
}
void print_link(link_list_t L,int len)
{
link_list_t link_p;
link_p=L->next;
while(link_p!=NULL)
{
len--;
if(len == 0)
printf("%d",link_p->data);
else
printf("%d ",link_p->data);
link_p=link_p->next;
}
}
int main()
{
link_list_t L;
int i,n=0,insert,insert_s,deletdata,len=0;
scanf("%d",&n);
len = n;
L=create_linklist(n);
//print_link(L,len);
//printf("\n");
//插入的元
scanf("%d",&deletdata);
insert_s = Delete_2(L,deletdata);
//len++;//长度 上插入的
//scanf("%d",&indata);
//insert_s=search_list(L,insert);
//insert_s=inser_list(L,insert-1,indata);
//delet_s = delet_list(L,delet-1);//插入节点i节点前的一个
if(insert_s !=0)
print_link(L,len-insert_s);
//printf("%d",insert_s);
else
printf("error!");
while(1);
}
转发至微博
转发至微博