编程之美:从无头单链表中删除节点

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

 

posted on 2012-08-18 13:26  as_  阅读(665)  评论(0编辑  收藏  举报

导航