呵呵,这个题不能直接删除已知的结点。由于是单链表,不知道前驱,仅仅知道
后继结点,直接删除会使链表断开。只是我们能够删除已知结点的后继结点,
后继结点,直接删除会使链表断开。只是我们能够删除已知结点的后继结点,
把后继结点的值赋值给已知结点。
#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 "; 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; }