判断单链表中是否存在环(网上说的笔试题)

admin2019-03-29  58

问题 判断单链表中是否存在环(网上说的笔试题)

选项

答案#include "stdafx.h" typedef char eleType; // 定义链表中的数据类型 typedef struct listnode // 定义单链表结构 { eleType data; struct listnode *next; }node; node *create(int n) // 创建单链表,n为节点个数 { node *p = (node *)malloc(sizeof(node)); node *head = p; head->data = ’A’; for(int i=’B’; i<’A’+n; i++) { p = (p->next = (node *)malloc(sizeof(node))); p->data = i; p->next = NULL; } return head; } void addCircle(node *head, int n) // 增加环,将链尾指向链中第n个节点 { node *q, *p = head; for(int i=1; p->next; i++) { if(i==n) q = p; p = p->next; } p->next = q; } int isCircle(node *head) // 这是笔试时需要写的最主要函数,其他函数可以不写 { node *p=head,*q=head; while( p->next && q->next) { p = p->next; if (NULL == (q=q->next->next)) return 0; if (p == q) return 1; } return 0; } int main(int argc, char* argv[]) { node *head = create(12); addCircle(head, 8); // 注释掉此行,连表就没有环了 printf("%d\n", isCircle(head)); return getchar(); }

解析
转载请注明原文地址:https://kaotiyun.com/show/sRmZ777K
0

最新回复(0)