//爲保證在O(1)時間刪除,因此沒法保證被刪除的節點必定在鏈表中,所以就須要函數調用者保證node
#include <iostream> using namespace std; struct Node{ int value; Node* next; Node(int vvalue) :value(vvalue), next(NULL){} ~Node(){ cout << "~Node()" << endl; } }; void DeleteNode(Node*& head, Node* toBeDeleteNode) { if (head == NULL || toBeDeleteNode == NULL)return; if (toBeDeleteNode->next != NULL){//被刪除節點不是尾節點 Node* nextNode = toBeDeleteNode->next; swap(toBeDeleteNode->value, nextNode->value); toBeDeleteNode->next = nextNode->next; delete nextNode; nextNode = NULL; } else if (toBeDeleteNode == head){//被刪除節點是尾節點且是頭結點 delete toBeDeleteNode; toBeDeleteNode = NULL; head = NULL; } else{//被刪除節點是尾節點且不是頭結點 Node* curNode = head; while (curNode->next != toBeDeleteNode){ curNode = curNode->next; } curNode->next = NULL; delete toBeDeleteNode; toBeDeleteNode = NULL; } } int main() { Node* node1 = new Node(1); Node* node2 = new Node(2); Node* node3 = new Node(3); Node* node4 = new Node(4); Node* node5 = new Node(5); Node* node6 = new Node(6); Node* node7 = new Node(7); node1->next = node2; node2->next = node3; node3->next = node4; node4->next = node5; node5->next = node6; node6->next = node7; Node* head = node1; Node* toBeDeleteNode = node7; DeleteNode( head, toBeDeleteNode); Node* curNode = head; while (curNode != NULL){ cout << curNode->value << " "; Node* tmpNode = curNode; curNode = curNode->next; delete tmpNode; } cout << endl; system("pause"); }
《完》
ios