首先,这是一个有点小问题的程序
链表是无头结点尾插法
但是 不能A表第一个元素开始截取(应该是无头节点的问题),望大佬指出问题.
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;//数据域
struct node* next;//指针域
}LNode, * LinkList;
LinkList linklistA() {
LinkList A;
LNode* s,*end=A=NULL;
int x;
printf("请输入A表内容\n");
scanf("%d",&x);
while (x != -1) {
s = (LinkList)malloc(sizeof(LNode));
s->data = x;
s->next=NULL;
if(A==NULL){
A=s;
}else{
end->next=s;
}
end=s;
printf("请输入A表内容\n");
scanf("%d",&x);
}
return A;
}
LinkList linklistB() {
LinkList B;
LNode* s,*end=B=NULL;
int x;
printf("请输入B表内容\n");
scanf("%d",&x);
while (x != -1) {
s = (LinkList)malloc(sizeof(LNode));
s->data = x;
s->next=NULL;
if(B==NULL){
B=s;
}else{
end->next=s;
}
end=s;
printf("请输入B表内容\n");
scanf("%d",&x);
}
return B;
}
//截取a表某段
LinkList deletel(LinkList A,int i,int len){
int x=1;
while(1){
if(i==1) break;
x++;
if(x==i) break;
A=A->next;
}
LinkList s=A->next;
LinkList s1=A;
LinkList h=s;
int j=0;
while(1){
j++;
if(j==len) break;
s=s->next;
}
A->next=s->next;
s->next=NULL;
s1->next=NULL;
return h;
}
//插入b表指定位置后
void mk(LinkList B,LinkList h,int j){
int s=0;
while(1){
s++;
if(s==j) break;
B=B->next;
}
B->next=h;
}
int main(){
LNode* A, * B;
LinkList r=NULL;
A = NULL, B = NULL;
A = linklistA();
B=linklistB();
int i,j,len;
printf("请输入截取位置和长度:\n");
scanf("%d %d",&i,&len);
LinkList h=deletel(A,i,len);
printf("请输入插入的位置:\n");
scanf("%d",&j);
mk(B,h,j);
//
// LinkList h=deletel(A,3,2);
// mk(B,h,2);
while(B){
printf("%d ",B->data);
B=B->next;
}
return 0;
}```