チェーンテーブルの中間ノードの値を求めて、チェーンテーブルの環を検出します
1676 ワード
チェーンテーブルの中間ノードの値を求めて、チェーンテーブルの環を検出します
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
",i);
return 1;
}
}
p1 = p1->next;
if(p2->next != null){
p2 = p2->next->next;
}else{
return 0;
}
}
printf("%d
",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 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
",middle(p1));
return 0;
}