查找链表倒数第K个位置结点
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10010
#define ElemType int
typedef struct LNode
{
ElemType data
;
LNode
*next
;
}LNode
,*LinkList
;
LinkList
initLinkList(int num
){
LNode
* head
=(LNode
*)malloc(sizeof(LNode
));
LinkList p
=head
;
p
->next
=NULL;
int elem
;
while(num
--){
printf("输入:");
scanf("%d",&elem
);
LNode
* L
=(LNode
*)malloc(sizeof(LNode
));
L
->data
=elem
;
L
->next
=NULL;
p
->next
=L
;
p
=p
->next
;
}
return head
;
}
LinkList
FindRevElem(LinkList l
,int length
,int loc
){
LinkList p
= l
->next
;
int count1
=0;
while(p
&&(count1
++ < (length
-loc
))){
p
=p
->next
;
}
return p
;
}
int getListLength(LinkList l
){
int length
=0;
LinkList p
=l
->next
;
while(p
){
length
++;
p
=p
->next
;
}
return length
;
}
void display(LinkList p
){
LinkList pp
=p
->next
;
while(pp
){
int data
=pp
->data
;
printf("%d ",data
);
pp
=pp
->next
;
}
}
int main(){
printf("输入元素个数:");
int num
;
scanf("%d",&num
);
printf("初始化链表\n");
LinkList LL1
;
LL1
=initLinkList(num
);
printf("\n打印链表\n");
display(LL1
);
printf("表长\n");
int length
;
length
=getListLength(LL1
);
printf("%d\n",length
);
printf("查找倒数第K个元素的结点\n");
int loc
;
printf("输入K:");
scanf("%d",&loc
);
LinkList findP
;
findP
=FindRevElem(LL1
,length
,loc
);
printf("find=%d\n",findP
->data
);
return 0;
}
转载请注明原文地址:https://blackberry.8miu.com/read-17161.html