关于链表的几道题
typedef struct Node
{
int data ;
node *next;
}node ;
typedef node * link ;
表结点如上,现有一个带头结点的链表,
要求写个程序,将表倒置
link reversse(link pHead)
{
// 在里面写
}
现在有一个链表,写个程序,判断程序是否有环!
伪代码也可!
现在有二个链表,写个程序,判断他们是否相交!
typedef struct Node
{
int data ;
node *next;
}node ;
typedef node * link ;
表结点如上,现有一个带头结点的链表,
要求写个程序,将表倒置
link reversse(link pHead)
{
link q, p , tmp;
q = pHead->next ;
p = q->next ;
if (pHead == NULL)
{
return NULL ;
}
while (p != NULL)
{
tmp = p ;
p = p->next ;
tmp->next = q ;
q = tmp;
}
return pHead = q ;
}
现在有一个链表,写个程序,判断程序是否有环!
伪代码也可!
int IsRing(link pHead)
{
link q, p ;
if (pHead == NULL)
{
return 0 ;
}
q = p = pHead->next ;
for ( ;q != NULL && p != NULL && q != p; q = q->next, p = p->next->next)
{
}
if (q == NULL || p == NULL)
{
return 0 ;
}
return 1 ;
}
第三题如果只是单链表的话,可以试下将next的值保存起来!判断是否有相同的,有的话一定相交了!
如果是循环链表的,记录二个pHead->next的值,看下走一次之后,是不是到了相同的地方!
如果你们还有别的方法,可以说出来共享一下!
页:
[1]