【每日面试题】链表相关问题2

题目: 只给定单链表中某个结点p(非空结点),在p前面插入一个结点(删除节点类似)

void insertNode(ListNode* pNode,int k)
{
   int m=pNode->data;
   pNode->data=k;
   ListNode* node=(ListNode*)malloc(sizeof(ListNode));
   node->data=m;
   node->next=pNode->next;
   pNode->next=node;
}

题目:给定单链表,检测是否有环

void HasCicle(ListNode* head)
{
   if(head==NULL)
       return false;
    bool flag=false;
    ListNode* p,q;
    p=head;
    q=head;
    while(q!=NULL)
    {
      p=p->next;
      q=q->next;
      if(q!=NULL)
          q=q->next;
       else
          break;
      if(p==q)
      {
        flag=true;
        break;
       }
     }
    return flag;
}

题目:单链表就地逆置

ListNode* reserve(ListNode* head)
{
   if(head==NULL)
        return head;
   ListNode* p,q,m;
   p=head;
   head->next=NULL;
   q=p->next;
   while(q!=NULL)
    {
     m=q;
     q=q->next;
     m->next=p;
     p=m;
      }
  return p;
}

题目:两个非降序链表的并集

ListNode* MergerList(ListNode* head1,ListNode* head2)
{
  if(head1==NULL)
       return head2;
   if(head2==NULL)
       return head1;
  ListNode* p1,p2;
  if(head1->data>=head2->data)
   {
     p1=head2;
     head2=head2->next;
    }
   else
    {
     p1=head1;
     head1=head1->next;
     }
     p2=p1;
   while(head1!=NULL&&head2!=NULL)
    {
      if(head1->data>=head2->data)
       {
           p2->next=head2;
           p2=p2->next;
           head2=head2->next;
           }
      else
       {
           p2->next=head1;
           p2=p2->next;
           head1=head1->next;
       }
     }
     if(head2!=NULL)
        p2->next=head2;
     else
        p2->next=head1;
   return p1;
}

题目出自于:http://blog.csdn.net/v_july_v/article/details/6076139

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值