#include<stdio.h>/*2009/08/29完成*/ #include<stdlib.h>/*从la中删除字第i个元素起共len个元素后,将他们插入到表lb中第j个元素之前!·*/ #include <malloc.h> #define ERROR 0 #define OK 1 typedef char ElemType; typedef struct Node { ElemType data; struct Node *next; }Node,*LinkList;/*LinkList为结构指针类型,用来说明头指针变量*/ void initlinklist(LinkList *L)/*初始化单链表*/ { *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; } void Create(LinkList L)/*建立单链表*/ { Node *s,*r; char c; int flag=1; r=L; while(flag) { c=getchar(); if(c!='#')/*当输入#时建表结束*/ { s=(Node *)malloc(sizeof(Node)); s->data=c; r->next=s; r=s; } else { flag=0; r->next=NULL; } } } int DelAndSub(LinkList LA,LinkList LB,int i,int j,int len) { Node *p,*q,*prev,*s; int k; if(i<0||j<0||len<0) return ERROR; p=LA; k=1; prev=NULL; while(p&&k<i) {prev=p;p=p->next;k++;} if(!p)return ERROR; q=p;k=1; while(q&&k<len) {q=q->next;k++;} if(!q)return ERROR; if(!prev) LA=q->next; else prev->next=q->next; if(j==1){q->next=LB;LB=p;} else{ s=LB; k=1; while(s&&k<j-1){s=s->next;k++;} if(!s)return ERROR; q->next=s->next; s->next=p; return OK; } } void print(LinkList L) { Node *p; p=L->next; printf("刚才建立的单链表为:/n"); while(p!=NULL) { printf("%c ",p->data); p=p->next; } } void main() { LinkList LA,LB; Node *p,*q,*r,*s; int i,len,j,k; char m,g,e; initlinklist(&LA); initlinklist(&LB); printf("please Create the LA,using the # End!/n"); Create(LA); print(LA); printf("/nplease Create the LB,using the # End!/n"); Create(LB); print(LB); printf("/nplease input the value of i(delete):"); scanf("%d",&i); printf("/nplease input the value of len:"); scanf("%d",&len); printf("/nplease input the value of j(insert):"); scanf("%d",&j); k=DelAndSub(LA,LB,i,j,len); if(k) printf("/nThe operate is OK!/n"); s=LA->next; printf("NOW the link LA value is:/n"); while(s!=NULL) { printf("%c ",s->data); s=s->next; } s=LB->next; printf("/nNOW the link LB value is:/n"); while(s!=NULL) { printf("%c ",s->data); s=s->next; } }