[英]Deletion of node from linked list
我正在嘗試使用 k 作為鏈表數據刪除節點。 下面的程序運行良好,但如果我們必須刪除頭節點,它不會給出所需的輸出。 例如,如果鏈表是 98->6->1 而我必須刪除 98,那么程序顯示的輸出是 0->6->1。 除了刪除頭節點外,其他所有情況都可以正常工作。 下面是相同的 C++ 代碼。
#include <bits/stdc++.h>
using namespace std;
class Node
{
public :
int data;
Node* next;
};
Node * insert(Node* head, int data) {
Node* new_node= new Node();
new_node->data = data;
new_node->next = head;
head = new_node;
return head;
}
void deleteNode(Node *head, int key)
{
Node *temp = head;
Node *prev = NULL;
if(temp!=NULL && temp->data==key){
head = temp->next;
delete temp;
}
else{
while(temp!=NULL && temp->data!=key){
prev = temp;
temp = temp->next;
}
if(temp == NULL){
return;
}
prev->next = temp->next;
delete temp;
}
}
void display(Node * head) {
while(head != NULL)
{
cout<<head->data<<" ";
head = head->next;
}
}
int main() {
Node * head = NULL;
head = insert(head, 1);
head=insert(head,6);
head=insert(head,98);
deleteNode(head,98);
display(head);
return 0;
}
在deleteNode()
,您通過 value傳入head
節點,因此對其進行的任何修改都不會反映回調用者。 您需要return
新的head
,就像使用Insert()
,否則您需要通過引用傳入head
:
void deleteNode(Node* &head, int key)
您的代碼中的錯誤是您傳遞給 deleteNode 函數的 head 是按值傳遞的,因此不會顯示對 head 函數所做的更改。 您函數中的頭部與主函數中的頭部不同,它只是該頭部的副本,因此要將在 deletenode 函數中應用於頭部的相同更改應用於原始頭部,您必須傳遞頭部(或通過引用傳遞)。
編輯您的代碼 - 當您通過引用傳遞值deleteNode(&head,98);
我在 deleteNode 函數的前五行和倒數第三行中應用了更改deleteNode(&head,98);
編輯代碼-
#include <bits/stdc++.h>
using namespace std;
class Node
{
public :
int data;
Node* next;
};
Node * insert(Node* head, int data) {
Node* new_node= new Node();
new_node->data = data;
new_node->next = head;
head = new_node;
return head;
}
void deleteNode(Node **head, int key)
{
Node *temp = *head;
Node *prev = NULL;
if(temp!=NULL && temp->data==key){
*head = temp->next;
temp->next = NULL;
delete temp;
}
else{
while(temp!=NULL && temp->data!=key){
prev = temp;
temp = temp->next;
}
if(temp == NULL){
return;
}
prev->next = temp->next;
// temp->next = NULL;
delete temp;
}
}
void display(Node * head) {
while(head != NULL)
{
cout<<head->data<<" ";
head = head->next;
}
}
int main() {
Node * head = NULL;
head = insert(head, 1);
head=insert(head,6);
head=insert(head,98);
deleteNode(&head,98);
display(head);
return 0;
}
現在,如果您運行上面的代碼,刪除值 98 的節點后您將獲得的輸出將是 6->1。 希望你會發現它有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.