给你单链表的头指针*h、某一个节点指针*p(p节点不是最后一个),在常数时间复杂度内删除P节点

一次实习面试的时候碰到了这个问题,现在把它记录下来。


给你单链表的头指针*h、某一个节点指针*p(p节点不是最后一个),在常数时间复杂度内删除P节点


其实这个问题很简单,把这个节点下一个节点的值付给这个节点,然后删除下一个节点就好了。伪代码如下:

void  deleteNode(Node *h,Node *p)

{

    //判断链表是否为空,为空则直接返回

   if(head->next() == null) return;

   //判断p节点是不是最后一个节点,如果不是最后一个节点,则删除下一个节点,否则找到P的前一个节点

   if(p->next() != null)

   {

      *p=*p->next();

        p==p->next()->next();

       delete(p->next());

   }else

  {

       Node q=h;

       while(q->next() !=p)

           q=q->next();

      delete(p);

      p=q;

   }

}


由于题目本身也不是很严谨,所以会有点问题,在这里主要是给大家提供一种解决问题的思路

你可能感兴趣的:(给你单链表的头指针*h、某一个节点指针*p(p节点不是最后一个),在常数时间复杂度内删除P节点)