从无头单链表中删除某节点(编程之美3.4)

1. 题目:一个无头单向链表,有一个指针指向其中的一个节点(非第一个与最后一个节点),请问如何删除此节点。


典型解法为“狸猫换太子”,删除一个链表节点,需要知道节点的前驱节点,但是当前无法知道,当前节点为下一个节点的前驱,因此可以将下一个节点的值赋给当前节点,然后删除下一个节点。

pcur->next=pnext->next;
pcur->data=pnext->data;
delete pnext;

2. 类似问题:一个无头单向链表,指针p指向其中一个节点,在当前节点前面插入一个新节点q。


在p后面插入节点q,然后交换值。

q->next=p->next;
p->next=q;
swap(&q->data, &p->data);

3. 扩展问题:对单向链表遍历一遍,实现链表翻转。

node* reverse(node *head)
{
  node *n =head;
  head=NULL;
  while(n)
  {
    m=n;
    n=n->next;
    m->next=head;
    head=n;
  }

  return head;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值