int loop(struct Node* head){
struct Node* p1 = head;
struct Node* p2 = head;
int i = 0;
while(p1 && p2){
i++;
if(i!=1){
if(p1->value == p2->value){
printf("%d\n",i);
return 1;
}
}
p1 = p1->next;
if(p2->next != null){
p2 = p2->next->next;
}else{
return 0;
}
}
printf("%d\n",i);
return 0;
}
int middle(struct Node* head){
struct Node* p1 = head;
struct Node* p2 = head;
while(p2){
p2 = p2->next;
if(p2 != null){
p1 = p1->next;
p2 = p2->next;
}
}
return p1->value;
}
int lastK(struct Node* head,int k){
struct Node* p1 = head;
struct Node* p2 = head;
while(k-->0){
p2 = p2->next;
}
while(p2){
p1 = p1->next;
p2 = p2->next;
}
return p1->value;
}
int main(int argc,char *argv[]){
/**
struct Node* head = create();
print(head);
struct Node* x = malloc(sizeof(struct Node));
x->value = 1;
delete(x,&head);
print(head);
**/
struct Node* p1 = malloc(sizeof(struct Node));
p1->value = 1;
struct Node* p2 = malloc(sizeof(struct Node));
p2->value = 2;
struct Node* p3 = malloc(sizeof(struct Node));
p3->value = 3;
struct Node* p4 = malloc(sizeof(struct Node));
p4->value = 4;
struct Node* p5 = malloc(sizeof(struct Node));
p5->value = 5;
p1->next = p2;
p2->next = p3;
p3->next = p4;
p4->next = p5;
p5->next = null;
printf("中间节点数值:%d\n",middle(p1));
printf("倒数第一个节点数值:%d\n",lastK(p1,2));
return 0;
}