Chinaunix首页 | 论坛 | 博客
  • 博客访问: 613403
  • 博文数量: 127
  • 博客积分: 6136
  • 博客等级: 准将
  • 技术积分: 1461
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 00:32

分类:

2010-07-03 21:10:14

问题描述:

假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(非第一个节点, 也非最后一个节点)。请将该节点从单链表中删除。

分析与解答:

若要删除该节点,正常情况下,应该要知道该节点的前面节点的指针,但是由于单链表中没有头结点,所以无法追溯到该节点前面的那个节点,因此,这里采用了“移花接木”的方法。设该节点为B,下一个节点为C。那么,首先将B节点的内容替换为C节点的内容,然后,将C节点删除,这样就达到了我们的目的。代码如下:


pcur->next = pnext->next;

pcur->data = pnext->date;

delete pnext;


思考题,将一个单链表,在只遍历一遍的情况下,将单链表中的元素顺序反转过来。

void add_to_head(node *head, node *pcur)
{
    pcur->next = head->next;
    head->next = pcur;
}
void reverse(node *head)
{
   node *p,*q;
   p = head->next;
   head->next = NULL;
   while(p)
  {
      q = p->next;
      add_to_head(head, p);
      p = q;
  }
}


阅读(3487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~