簡體   English   中英

從鏈表中刪除節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM