大一C++题目,这个一看就好难啊

题目描述
设有说明语句:

struct List

{ int data ; List * next ;

} ;

 List *head;

head是有序单向链表的头指针。请编写函数:

 void Count( List * head );

计算并输出链表数据相同值的结点及个数。例如,若数据序列为:

2 3 3 3 4 5 5 6 6 6 6 7 8 9 9

则输出结果:

data number

3 3

5 2

6 4

9 2

输入
多组测试样例,每组输入一行。行末元素为-1表示该组测试样例输入结束。

最后一行单独输入一个-1表示测试结束

输出
输出链表数据相同的结点及个数,结点值与个数之间用空格隔开

样例输入
0 9 4 8 8 2 4 5 5 1 7 1 1 5 -1
1 4 2 3 2 2 1 6 8 5 7 6 1 8 9 2 -1
-1

样例输出
4 2
8 2
5 3
1 3
1 3
2 4
6 2
8 2

提示

输出的值的顺序应遵循输入的顺序。

 #include<iostream>
using namespace std;

typedef struct List{
    int data;
    struct List *next;
}List;

List *create()
{
    List *head,*p,*q;
    head=new List;
    head->next=NULL;
    p=head;
    cin>>p->data;
    while(p->data!=-1)
    {
        q=p;
        p=new List;
        q->next=p;
        p->next=NULL;
        cin>>p->data;
    }
    return head;
}

int Count(List *head)
{
    List *p,*q;
    p=head;
    q=p->next;
    int cnt=1;
    while(p->data!=-1)
        {
            if(p->data==q->data)
                cnt++;
            else{
                cout<<p->data<<" "<<cnt<<endl;
                cnt=1;
                p=q;
            }
            q=q->next;
        }
}

int main()
{
        List *head=create();
        Count(head);
        return 0;
}

写的是个单组输入的情况,具体可以自己拓展成多组输入的