1.问题描述
假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除。
如下图所示:
2.分析与解法
假设给定的指针为pCurrent, Node* pNext = pCurren->next
其中pCurren->next!=NULL,如下图,因为没有头结点,删除pCurren指向的节点B就很困难,而删除节点C就非常容易,于是就现将节点C当中的数据等信息拷贝到节点B上,覆盖节点B原来的数据,然后删除节点C。
删除之前
删除之后
3.代码实现
struct Node { int data; Node* next; }; void DeleteRandomNode(Node* pCurrent) { if(pCurrent == NULL) return; Node* pNext = pCurrent->next; pCurrent->data = pNext->data; pCurrent->next = pNext->next; delete pNext; }