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;
}