题目
思想
先使 p=list->next,p 指针一步步后移,当 p 移到第 k 个结点时,令 q=list->next。之后 p 、q指针 同步后移,当 p 移到最后一个结点时,q 所指结点就是要找结点。
代码
int find(LinkList list, int k) {
LNode *p = list->next, *q = list->next;
while(p != NULL && k > 1) {
p = p->next;
k--;
}
if (p == NULL) return 0;
while(p->next != NULL) {
p = p->next;
q = q->next;
}
printf("result: %d\n", q->data);
return 1;
}
测试
int main() {
LinkList list = create(0);
LNode *l1 = create(1);
list->next = l1;
LNode *l2 = create(2);
l1->next = l2;
LNode *l3 = create(3);
l2->next = l3;
LNode *l4 = create(4);
l3->next = l4;
LNode *l5 = create(5);
l4->next = l5;
printf("%d\n", find(list, 5));
return 0;
}
其他代码
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
int data;
struct node *next;
}LNode, *LinkList;
LNode* create(int data) {
LNode *n = (LNode *)malloc(sizeof(LNode));
n->data = data;
n->next = NULL;
return n;
}