evilknight 发表于 2009-8-29 20:50:48

关于链表的几道题


typedef struct Node
{
    int data ;
    node *next;
}node ;
typedef node * link ;

表结点如上,现有一个带头结点的链表,
要求写个程序,将表倒置
link reversse(link pHead)
{
// 在里面写
}

现在有一个链表,写个程序,判断程序是否有环!
伪代码也可!

现在有二个链表,写个程序,判断他们是否相交!

evilknight 发表于 2009-8-30 12:11:12


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 ;
}

evilknight 发表于 2009-8-30 12:13:55


第三题如果只是单链表的话,可以试下将next的值保存起来!判断是否有相同的,有的话一定相交了!
如果是循环链表的,记录二个pHead->next的值,看下走一次之后,是不是到了相同的地方!
如果你们还有别的方法,可以说出来共享一下!
页: [1]
查看完整版本: 关于链表的几道题