链表操作

逆序输入一个n位长度的链表,删除其第m位元素,再输出新生成的链表。

#include<stdio.h>                                               //逆序输入一个n位长度的链表,删除其中的第m个元素再输出
#include<stdlib.h>

#define  OK             1
#define  ERROR    0

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

LinkList ListDelete_L(LinkList L,int i);                //删除第i个元素,再返回L
LinkList ListCreate_L(LinkList L,int n);                //创建含有n个元素域的链表L

int main(){
        LinkList L,p;
        int i,n,m;
        scanf("%d %d",&n,&m);
        L=ListCreate_L(L,n);            //创建一个n个元素的链表
        L=ListDelete_L(L,m);            //删除第m个元素
        p=L->next;
       for(i=0;i<n-1;i++){                //此处,因为最终生成的L只有n-1个元素
                printf("%d",p->data);
                p=p->next;
       }
        return 0;
}

LinkList ListDelete_L(LinkList L,int i){                //删除第i个元素,再返回新链表L
        LinkList p,q;
        int j=1;
        p=L->next;
        while(p&&j<i-1){
                p=p->next;
                ++j;
        }
        if(!p||!(p->next)||j>i-1)
                return ERROR;
        q=p->next;
        p->next=q->next;
        free(q);
      return L;
}
LinkList ListCreate_L(LinkList L,int n){                    //逆序法输入n个元素,建立链表L
        int i;
        LinkList p;
        L=(LinkList)malloc(sizeof(LNode));
        L->next=NULL;
        for(i=n;i>0;i--){
               p=(LinkList) malloc(sizeof(LNode));
               scanf("%d",&p->data);                                    //输入元素值
              p->next=L->next;
               L->next=p;
        }
        return L;
}
链表创建时采用的是逆序输入数据,此点一定要注意!!!

猜你喜欢

转载自blog.csdn.net/youm3872/article/details/80526506