题解 | #从单向链表中删除指定值的节点#

从单向链表中删除指定值的节点

http://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f

include "stdio.h"

include "string.h"

include "stdlib.h"

typedef struct node
{
int a;
struct node *next;
}Node;
typedef struct
{
int num;
int n[1000];
Node *front;
Node *rear;
}List;

//队列初始化
//在特定值后面插入
//删除特定值
//遍历节点
void List_Insert(List *list ,int data,int posdata)
{
Node *node1= list->front;
Node *newnode=(Node *)malloc(sizeof(Node));
newnode->a=data;
while(node1->a!=posdata)
{
node1=node1->next;
}
list->n[list->num]=data;
list->num++;
newnode->next=node1->next;
node1->next=newnode;
if( newnode->next==NULL)
{
list->rear=newnode;
}
}
int main ()
{
Node node;
List list;
memset(&list.n,0,sizeof(list.n));
int i,cnt=0,nodenum,len=0,a[1000]={0},value[1000]={0};
while(scanf("%d",&a[len++])!=EOF);
//总共有多少数据
len=len-1;
//节点总个数
nodenum=a[0];
//节点头
node.a=a[1];
node.next=NULL;
//队列当前节点数
list.num=1;
list.n[0]=2;
list.front=&node;
list.rear=&node;
for(i=2;i<len-2;i++)
{
List_Insert(&list,a[i],a[i+1]);
i++;
}
//输出队列
for(i=0;i<list.num;i++)
{
if(list.front->a!=a[len-1])
{
value[cnt++]=list.front->a;

}
list.front=list.front->next;

}
for(i=0;i<cnt;i++)
{
printf("%d",value[i]);
printf(" ");
}

return 0;
}
好像搞麻烦了,单链表应该就可以了。而且该例中默认不会出现数据错误,因此不考虑异常情况

全部评论

相关推荐

AFBUFYGRFHJLP:直接去美帝试试看全奖phd吧
点赞 评论 收藏
分享
M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务