逆序输入一个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; }链表创建时采用的是逆序输入数据,此点一定要注意!!!