呵呵,这个题不能直接删除已知的结点。由于是单链表,不知道前驱,仅仅知道
后继结点,直接删除会使链表断开。只是我们能够删除已知结点的后继结点,
后继结点,直接删除会使链表断开。只是我们能够删除已知结点的后继结点,
把后继结点的值赋值给已知结点。
#include <iostream>
struct Node
{
int data;
Node* next;
};
bool removeNode(Node* vNode)
{
if (vNode == NULL || vNode->next == NULL) return false;
Node* pNext = vNode->next;
vNode->data = pNext->data;
vNode->next = pNext->next;
delete pNext;
pNext = NULL;
}
void initList(Node* vRoot)
{
if (vRoot == NULL)
{
std::cout << "wrong node\n";
return ;
}
for (int i=0; i<20; ++i)
{
Node* Temp = new Node;
Temp->data = i + 1;
Temp->next = vRoot->next;
vRoot->next = Temp;
}
}
int main()
{
Node* Root = new Node;
Root->next = NULL;
initList(Root);
while (Root->next)//最后一个结点没有删除
{
if (!removeNode(Root)) break;
}
std::cout << Root->data << std::endl;
delete Root;
Root = NULL;
system("pause");
return 0;
}