您的位置:首页 > 编程语言

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

2013-09-27 14:52 246 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: