+ -
当前位置:首页 → 问答吧 → 链表的插入和删除

链表的插入和删除

时间:2011-07-27

来源:互联网

bool insert_list(pNode pHead, int pos,int val)
{
  pNode p = pHead;//pHead为头指针
  int i = 0;
  while(p && i<pos-1)
  {
  p = p->next;
  i++;
  }
  if (p || i>pos-1)
  {
  return false;
  }
  //下面省略
}

bool delete_list(pNode pHead, int pos,int *val)
{
  pNode p = pHead;//pHead为头指针
  int i = 0;
  while(p->next && i<pos-1)
  {
  p = p->next;
  i++;
  }
  if (p->next || i>pos-1)
  {
  return false;
  }
  //下面省略
}
请问一下 为什么 插入和删除中 while的循环判断条件不同 一个是 p 一个是p->next 还有就是谁能具体讲一讲这个算法的思想

作者: wenhailong1224   发布时间: 2011-07-27

链表插入删除操作简单描述如下:
C/C++ code

typedef struct Node *link;
struct Node{
    unsigned char item;
    link next;
};

void insert(link p)
{
    p->next = head;
    head = p;
}

void delete(link p)
{
    link pre;
    if (p == head)
    {   
        head = p->next;
        return;
    }   
    for (pre = head; pre; pre = pre->next)
    {   
        if (pre->next == p)
        {   
            pre->next = p->next;
            return;
        }   
    }   
}


对于楼主的程序,你可以在本机跑一下就清楚了

作者: cougar0709   发布时间: 2011-07-27

插入的时候只要P不为空,我们就可以插入,插在p->next.
删除的时候,你要改变P这个节点的前后的指针,所以你要知道后面是不是空。不是空,就要将前面节点的指针指到p->next的节点,如果是空,那么直接删除,并且next赋值为空即可。

作者: zhang20072844   发布时间: 2011-07-27