数据结构链表问题学校刚学请教一下

代码如下 小白肯定有很多错误,哪位好心人能帮我看看修改修改,谢谢啦 teacher让我们输出如下图片结果

img

// 1-2-blank.cpp 实现算法2.11、2.12的程序
#include"c1.h"
typedef int ElemType;
#include"c2-2.h"
#include"bo2-2.h"

void CreateList(LinkList &L,int n) // 算法2.11
{ // 逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L
int i;
LinkList p;
L = (SqList*)malloc(sizeof(SqList));//用malloc函数来新建一个L
L->next=NULL; // 先建立一个带头结点的单链表
printf("请输入%d个数据\n",n);
for(i=n;i>0;--i)
{
L=new LNode;// 生成新结点
cin>>p->data;// 输入元素值
node *p = L->head; // 插入到表头
return OK;
}
}

void CreateList2(LinkList &L,int n)
{ // 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
int i;
LinkList p,q;
L = (SqList*)malloc(sizeof(SqList));//用malloc函数来新建一个L
L->next=NULL;
q=L;
printf("请输入%d个数据\n",n);
for(i=1;i<=n;i++)
{
L=new LNode;// 生成新结点
cin>>p->data;// 输入元素值
p->next=NULL; r->next=p; // 插入到表尾
return OK;
}
p->next=NULL;
}

void MergeList(LinkList La,LinkList &Lb,LinkList &Lc)// 算法2.17
{ // 已知单链线性表La和Lb的元素按值非递减排列。
// 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列
LinkList pa=La->next,pb=Lb->next,pc;
Lc=pc=La; // 用La的头结点作为Lc的头结点
while((pa<=pa_last) && (pb<=pb_last))//循环条件
if(pa->data<=pb->data)//摘取pa所指结点
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else//摘取pb所取结点
{

    pc->next=pb; 
    pc=pb; 
    pb=pb->next;
 }

while (pa<=pa // 将非空表的剩余段插入pc后
delete LB;// 释放Lb的头结点
Lb=NULL;
}

void visit(ElemType c) // ListTraverse()调用的函数(类型要一致)
{
printf("%d ",c);
}

void main()
{
int n=5;
LinkList La,Lb,Lc;
ElemType e;
printf("按非递减顺序, ");
CreateList2(La,n); // 正位序输入n个元素的值
printf("La="); // 输出链表La的内容
ListTraverse(La,visit);
printf("按非递增顺序, ");
CreateList(Lb,n); // 逆位序输入n个元素的值
printf("Lb="); // 输出链表Lb的内容
ListTraverse(Lb,visit);
ListDelete(La,3,e);
printf("删除表La中第三个元素:");
ListTraverse(La,visit);
MergeList(La,Lb,Lc); // 按非递减顺序归并La和Lb,得到新表Lc
printf("Lc="); // 输出链表Lc的内容
ListTraverse(Lc,visit);

}

这么长吗,我傻了,哪个函数错了?
creatlist中L->head是?

前几天刚写的代码:

题主的代码修改如下,供参考:

//#include <stdio.h>
//#include"c1.h"
//#include"c2-2.h"
//#include"bo2-2.h"
#include <iostream>
using namespace std;

typedef int ElemType;
typedef struct LNode {
    ElemType      data;
    struct LNode* next;
}SqList,* LinkList;


void CreateList(LinkList& L, int n) // 算法2.11;;
{    // 逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L
    int i;
    LinkList p;
    L = (SqList*)malloc(sizeof(SqList));//用malloc函数来新建一个L
    L->next = NULL; // 先建立一个带头结点的单链表
    cout << "请输入" << n << "个数据:" << endl;   //printf("请输入 % d个数据 : \n", n);
    for (i = 0; i < n; i++)//for (i = n; i > 0; --i)
    {
        p = (SqList*)malloc(sizeof(SqList));//L = new LNode;// 生成新结点
        if (!p) return;
        p->next = NULL;
        cin >> p->data;// 输入元素值
        p->next = L->next;// 插入到表头
        L->next = p;     
    }
    //return OK;
}

void CreateList2(LinkList& L, int n)
{ // 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
    int i;
    LinkList p, q;
    L = (SqList*)malloc(sizeof(SqList));//用malloc函数来新建一个L
    L->next = NULL;
    q = L;
    cout << "请输入" << n << "个数据:" << endl; //printf("请输入%d个数据:\n", n);
    for (i = 0; i < n; i++)  //for (i = 1; i <= n; i++)
    {
        p = (SqList*)malloc(sizeof(SqList));//L = new LNode;// 生成新结点
        if (!p) return;
        p->next = NULL;
        cin >> p->data;// 输入元素值
        q->next = p; // 插入到表尾
        q = p;
    }
}

void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc)// 算法2.17
{ // 已知单链线性表La和Lb的元素按值非递减排列。
// 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列
    LinkList pa = La->next, pb = Lb->next, pc;
    Lc = pc = La; // 用La的头结点作为Lc的头结点
    while (pa && pb)//循环条件
    {
        if (pa->data <= pb->data)//摘取pa所指结点
        {
            pc->next = pa;
            pc = pa;
            pa = pa->next;
        }
        else {  //摘取pb所取结点
            pc->next = pb;
            pc = pb;
            pb = pb->next;
        }
    }
    pc->next = pa ? pa : pb; //while (pa <= pa) // 将非空表的剩余段插入pc后
    free(Lb);//deletd Lb; 释放Lb的头结点
    Lb = NULL;
}

void ListDelete(LinkList L, int n, ElemType& e)
{
    int i = 0;
    LNode* p = L, * s = NULL;
    if (n < 1) return;
    while (p && i < n)
    {
        s = p;
        p = p->next;
        i++;
    }
    if (!p) return;
    s->next = p->next;
    e = p->data;
    free(p);
}

void  ListTraverse(LinkList L)//visit(ElemType c) // ListTraverse()调用的函数(类型要一致)
{
    SqList* p = L->next;
    while (p)
    {
        cout << p->data<<" "; //printf("%d ", p->data);
        p = p->next;
    }
    cout << endl;        //printf("\n");
}

int  main()
{
    int n = 5;
    LinkList La, Lb, Lc = NULL;
    ElemType e = -1;

    cout << "按非递减顺序,";     //printf("按非递减顺序, ");
    CreateList2(La, n); // 正位序输入n个元素的值
    cout << "La=";               //printf("La="); // 输出链表La的内容
    ListTraverse(La);  //ListTraverse(La);

    cout << "按非递增顺序,";    //printf("按非递增顺序, ");
    CreateList(Lb, n); // 逆位序输入n个元素的值
    cout << "Lb=";             //printf("Lb="); // 输出链表Lb的内容
    ListTraverse(Lb);//ListTraverse(Lb);

    ListDelete(La, 3, e);
    cout << "删除表La中第三个元素[" << e << "]:"; //printf("删除表La中第三个元素[%d]:", e);
    ListTraverse(La);

    MergeList(La, Lb, Lc); // 按非递减顺序归并La和Lb,得到新表Lc
    cout << "Lc=";          //printf("Lc="); // 输出链表Lc的内容
    ListTraverse(Lc);
    return 0;
}

img