首先用struct定义一个链表节点
typedef struct Node {
int val;
Node* next;
Node(int _val, Node* _next=nullptr) : val(_val), next(_next) {}
}*pNode;
删除节点的功能实现:
void deleteNode(Node* head, Node* target) {
if (target == nullptr) return;
Node* pre = head; //保存前一个节点
Node* cur = head->next; //指向当前节点
while (cur != nullptr) {
if (cur == target) break;
pre = cur; //如果不相等则继续往下一个节点遍历
cur = cur->next;
}
if (cur == nullptr) return;
else {
pre->next = cur->next; //当找到要删除的节点,改变前一个节点的指向,使其指向要删除节点的下一个节点
delete cur;
}
}
在主函数中测试删除节点功能:
int main() {
Node* node5 = new Node(6);
Node* node4 = new Node(5, node5);
Node* node3 = new Node(4, node4);
Node* node2 = new Node(3, node3);
Node* node1 = new Node(2, node2);
Node* head = new Node(1, node1);
Node* dummyHead = new Node(-1, head);
Node* cur = dummyHead->next;
cout << "============" << endl;
while (cur != nullptr) {
cout << cur->val << endl;
cur = cur->next;
}
cout << "============" << endl;
deleteNode(dummyHead, head);
cur = dummyHead->next;
while (cur != nullptr) {
cout << cur->val << endl;
cur = cur->next;
}
return 0;
}