题解 | #KiKi学结构体和指针#

KiKi学结构体和指针

http://www.nowcoder.com/practice/0ab593ca56b1476eb05b1ff848fd7fcc

#include<stdio.h>
struct numNode{
    int data;
    struct numNode *next;
};
int main(void)
{
    int n,m;
    scanf("%d",&n);
    struct numNode *head=NULL;//设置一个头结点
    struct numNode *tail=NULL;//设置一个尾节点
    for(int i=0;i<n;i++)
    {
        int val;
        scanf("%d",&val);
        struct numNode *node=(struct numNode *)malloc(sizeof(struct numNode));//对输入的每个数用新结点存放
        node->data=val;
        node->next=NULL;
        if(tail==NULL)//如果尾节点指向NULL,则将新结点设置成尾节点
            tail=node;
        else//如果尾节点不为空,则将新结点连接到尾节点后面,并且将其设置为尾节点
        {
            tail->next=node;
            tail=node;
        }//如果头指针为空,则将新结点设置为头指针
        if(head==NULL)
            head=node;
    }
    scanf("%d",&m);
    int count=0;
    struct numNode *newhead=head;//定义一个newhead指针,用于遍历和删除链表相应结点
    while(newhead!=NULL)
    {
        
        if(newhead->data==m)//如果要删除的是头结点,则将头结点的下一个结点设置成新的头结点
        {
            count++;//删了后计数
            head=newhead->next;
            newhead=newhead->next;
        }
        else if(newhead->next!=NULL&&newhead->next->data==m)//如果要删除的是newhead的下一个结点
        {
            count++;//删了后计数
            newhead->next=newhead->next->next;//则直接将newhead的next指针指向要删除的下一个结点
        }
        else
            newhead=newhead->next;//如果不是要删除的结点,则newhead继续向后遍历
    }
    printf("%d\n",n-count);
    while(head!=NULL)
    {
        printf("%d ",head->data);
        head=head->next;
    }
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务