📄 4-4-11.c
字号:
/*中国系统分析员顾问团,http://www.csai.cn*/
/*程序员下午考试指南书籍源码*/
#include <stdio.h>
#include <malloc.h>
typedef struct node {
int key;
struct node *next;
}*LinkedList;
int DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len){
LinkedList p,q,s,prep,pres;
int k;
if(!La->next || !Lb->next || len <= 0) return -1;
p = La->next; prep = La;
while(p && p->key != key1) { /*查找表A中键值为key1的结点*/
prep = p; p = p->next;
}
if(!p) return -1; /*表A中不存在键值为key1的结点*/
q = p; k = 1;
while (q && k < len ) { /*在表A中找出待删除的len个结点*/
q = q->next; k++;
}
if(!q) return -1; /*表A中不存在要被删除的len个结点*/
s = Lb->next; pres = Lb ;
while(s && s->key != key2) { /*查找表B中键值为key2的结点*/
pres = s;s = s->next;
}
if(!s) return -1; /*表B中不存在键值为key2的结点*/
prep->next = q->next; /*将表A中的len个结点删除*/
q->next = s ;
pres->next = p; /*将len个结点移至表B*/
return 0;
}
//下面的代码是测试时加进来的.
LinkedList Inilink(int *data,int n)
{ LinkedList head,p,q;
int i;
p=(LinkedList)malloc(sizeof(LinkedList));
p->key=data[0];
p->next=NULL;
head=p;
for(i=1;i<n;i++)
{
q=(LinkedList)malloc(sizeof(LinkedList));
q->key=data[i];
q->next=NULL;
p->next=q;
p=q;
}
return head;
}
main()
{ int a[]={3,5,7,8,23},b[]={1,2,3,4,5,6,7,8,9,10};
LinkedList linka,linkb;
linka=Inilink(a,5);
linkb=Inilink(b,10);
DelA_InsB(linka,linkb,5,2,4);
while(linkb)
{
printf(" %d ",linkb->key);
linkb=linkb->next;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -