C语言问题,从键盘输入n个英语单词。输入格式为n,w1,w2,w3…wn,其中n表示随后输入的英语

单词个数,将输入的单词以单链表形式储存,如果单词重复出现,则在链表上只保留一个,并统计单词出现的次数。坐等大神解答,急求,谢谢

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

typedef struct Link
{
        int num;
        char *p;
        struct Link *next;
}Link;

void  Insert(Link *head,char *str)
{
        while(head->next!=NULL)
        {
                head = head ->next;
                if(strcmp(str,head->p)==0) { head->num++; return ;}
        }
        Link *tmp = (Link*)malloc(sizeof(Link));
        tmp->p = (char *) malloc(sizeof(str));
        strcpy(tmp->p,str);
        tmp->num=1;
        tmp->next=NULL;
        head->next=tmp;
//      return node;
}

void print(Link *head)
{
        Link *node = head->next;
        while(node!=NULL)
        {
                printf("%s:%d\n",node->p,node->num);
                node=node ->next;
        }
}
int main()
{
        int n;
        Link *head=(Link*)malloc(sizeof(Link*));
        scanf("%d",&n);
        while(n--)
        {
                char tmp[100];
                scanf("%s",tmp);
                Insert(head,tmp);
        }
        print(head);
        return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-09
我提供个思路,你可以用递归的方式解这个问题。如果m=10,w1=1,则如果w1为满足的若干件其中之一的话,则需要其他加起来为m-w1,以此类推,直到w1到wn中有满足的,且没有重复的为止