求帮助。。。

作者在 2011-11-20 12:40:51 发布以下内容
#include<stdio.h>
#include<malloc.h>
#define   List_init_size    2
#define   Listincrement     10
typedef   struct  LNode{

    int     data;
    struct  LNode  *next;
}LNode,*LinkList;
void  LNode_CreateList(LinkList  head,int  n)//创建链表--顺序法创建链表
{
    LinkList  p1=head;
    int    a;
    for(int i=1;i<=n;i++)
    {
        LinkList  L1=(LNode*)malloc(sizeof(LNode));
        printf("请输入第%d个结点的值域:",i);
        scanf("%d",&a);
        L1->data=a;
        p1->next=L1;
    }
    free(p1);

}

void  LNode_TraveList(LinkList  head)//遍历
{
    int i=0;
    LinkList  p;
    p=head->next;
    printf("空间内的所有数据元素如下:\n");
    while(p!=NULL)
    {
        i++;
        printf("链表中第%d个结点的值域是:%d\n",i,p->data);
        p=p->next;
    }
}
void  LNode_Insertlist(LinkList  head,int n1,int e)//插入,n1为插入的位置,e 为插入的值
{
    LNode  L;
    LinkList  p=head;
    L.data=e  ;
    int i=1;
    if(n1<i)
        printf("所插入的位置错误。");
    else
    {
        while(i<n1&&p->next!=NULL)//此处应该注意
        {
            i++;
             p=p->next;
        }
        if(i!=n1)
            printf("所插入的位置错误。");
        else
        {
            L.next=p->next;
            p->next=&L;
        }
    }
    printf("链表中所有结点的值域如下:");
    LNode_TraveList(head);
}
int LNode_Delete(LinkList  head,int n2)//删除链表中的一个结点,n2为删除结点的位置
{
    LinkList  p=head;
    int i=1;
    int e;
    if(n2<i)
        printf("所删除的位置错误。\n");
    else
    {
        while(i<n2&&(p->next!=NULL))
        {
            i++;
             p=p->next;
        }
        if(i!=n2)
            printf("所删除的位置错误。\n");
        else
        {
           e=p->data;
           p->next=p->next->next;
    
        }
    }
//    printf("链表中所有结点的值域如下:");
//    LNode_TraveList(head);
    return  e;
    
}
void  MergeList_L(LinkList  La,LinkList  Lb,LinkList  Lc)//合并两个有序链表
{
    LinkList  pa=La->next;
    LinkList  pb=Lb->next;
    LinkList  pc=Lc=La;
    while(pa&&pb)
    {
        if(pa->data<=pb->data)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else
        {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
    }
    pc->next=pa?pa:pb;
    free(Lb);
}
void  main()
{
    int  n; //确定结点的个数
    int  n1;//插入结点的位置
    int  n2;//删除结点的位置
    int  e; //所要插入的结点的值域
    LinkList  head=(LNode*)malloc(List_init_size *sizeof(LNode));
    head->next=NULL;
    printf("请输入所要创建的链表的结点的个数:\n");
    scanf("%d",&n);
    LNode_CreateList(head, n);
    LNode_TraveList(head);
    printf("请输入所要插入结点的位置:");
    scanf("%d",&n1);
    printf("请输入所要插入结点的值域:");
    scanf("%d",&e);
    LNode_Insertlist(head,n1,e);
    printf("请输入所要删除结点的位置:");
    scanf("%d",&n2);
    printf("删除的结点的值域为:%d\n",LNode_Delete(head,n2));

}
运行的结果和与预想的不一样。。。求帮助。。。
默认分类 | 阅读 480 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论