未完成版本:有多余结点不在链表上-段错误
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
int nextaddress;
int address;
struct node* next;
}node;
typedef struct node* linklist;
linklist reverse(linklist head,int k){
linklist ne,old,tmp;
int cnt=1;
ne=head->next;
old=ne->next;
while(cnt<k){
tmp=old->next;
old->next=ne; old->nextaddress=ne->address;
ne=old;
old=tmp;
cnt++;
}
head->next->next=old;
if(!old) head->next->nextaddress=-1;
else head->next->nextaddress=old->address;
head->next=ne;
return head;
}
int main(){
int first,n,k,i;
scanf("%d %d %d",&first,&n,&k);
linklist L1,p1,p2;
L1=(linklist)malloc(sizeof(struct node));
L1->next=NULL;
p1=L1;
for(i=0;i<n;i++){
p2=(linklist)malloc(sizeof(struct node));
scanf("%d %d %d",&p2->address,&p2->data,&p2->nextaddress);
p1->next=p2;
p1=p2;
}
p1->next=NULL;
linklist L2,p3;
L2=(linklist)malloc(sizeof(struct node));
L2->next=NULL;
int count=0,x=first;
p3=L2;
while(x!=-1){
p1=L1;
while(p1->next){
if(p1->next->address==x){
p3->next=p1->next;
p1->next=p1->next->next;
p3=p3->next;
x=p3->nextaddress;
count++;
}
else p1=p1->next;
}
}
p3->next=NULL;
int j=count;
linklist q1,q2,L3;
q1=L2;
L3=(linklist)malloc(sizeof(struct node));
L3->next=NULL;
q2=L3;
while(j>=k){
j-=k;
q1=reverse(q1,k);
for(i=0;i<k;i++){
q2->next=q1->next;
q1=q1->next;
q2=q2->next;
}
}
q2->next=q1->next;
linklist q3=L3->next;
while(q3->next){
q3->nextaddress=q3->next->address;
q3=q3->next;
}
q3->nextaddress=-1;
p1=L3->next;
for(i=0;i<n;i++){
if(p1->nextaddress==-1) printf("%05d %d -1\n",p1->address,p1->data,p1->nextaddress);
else printf("%05d %d %05d\n",p1->address,p1->data,p1->nextaddress);
p1=p1->next;
}
return 0;
}