求大家看一下头插法创建有头节点的单链表咋弄

以下是整体代码
#include
struct node
{
int data;
node *next;
};

以下是需要创建的部分

node *merge(node *f1,node *f2)
{
node *f3=new node;

return f3;
}
到这里为止

node *linklist(int a[ ], int n)
{
node *first,*rear,*s;
first=new node;
rear=first;
for (int i=0; i
{
s=new node ;
s->data=a[i];
rear->next=s;
rear=s;
}
rear->next=NULL;
return first;
}

void main()
{int a[5]={2,3,5};
int b[5]={1,2};
node *f1,*f2,*p,*f3;
f1=linklist(a,3);
f2=linklist(b,2);
f3=merge(f1,f2);
p=f3->next;
for(int i=0;i<5;i++)
{coutp=p->next;
}
}

修改如下,供参考:

#include<iostream.h>
using namespace std;
struct node
{
    int data;
    node *next;
};

//以下是需要创建的部分
struct node *merge(struct node *f1,struct node *f2)
{
    struct node *p1 = f1->next,*p2 = f2->next, *pt;
    struct node *f3=new node;
    f3->next = NULL;
    while (p1 && p2){
        if (p1->data < p2->data){
            pt = p1;
            p1=p1->next;
        }
        else{
            pt = p2;
            p2=p2->next;
        }
        pt->next = f3->next;
        f3->next = pt;
    }
    p1 = p1 ? p1 : p2;
    while (p1){
        pt = p1;
        p1=p1->next;
        pt->next = f3->next;
        f3->next = pt;
    }
    delete f1;
    delete f2;
    return f3;
}
//到这里为止

struct node *linklist(int a[], int n)
{
    struct node *first,*rear,*s;
    first=new node;
    rear=first;
    for (int i=0; i<n; i++)
    {
         s=new node ;
         s->data=a[i];
         rear->next=s;
         rear=s;
    }
    rear->next=NULL;
    return first;
}

void main()
{
    int a[5]={2,3,5};
    int b[5]={1,2};
    struct node *f1,*f2,*p,*f3;
    f1=linklist(a,3);
    f2=linklist(b,2);
    f3=merge(f1,f2);
    p=f3->next;
    for(int i=0;i<5;i++)
    {
        cout<<p->data<<",";
        p=p->next;
    }
}