如何在不访问其父节点的情况下删除链表中的节点?

how to delete a node in a linked list without accessing its parent node?

我已经创建了一个包含 4 个节点的链表 t1 t2 t3 t4(按顺序), 这样

头=t1
t1->下一个=t2
t2->下一个=t3
t3->下一个=t4

t1->数据=1
t2->数据=2
t3->数据=3

我想删除t3,这样链表就只打印1 2.
但它正在打印 1 2 0 4.

此外,在检查后我发现 t2->next 不是 NULL,尽管 t3=t2->next 并且我已经删除了 t3。

那么,如何在不访问 t2 的情况下删除 t3?

#include<bits/stdc++.h>
using namespace std;

typedef struct linkedList
{
    int data;
    linkedList *next;
}node;

node* getNewNode()
{
    node* nw=new node;
    nw->next=NULL;
    return nw;
}

void display(node* &start)
{   
    if(!start) return ;
    node *temp=start;
    while(temp)
    {
        cout<<temp->data<<" ";
        temp=temp->next;
    }
    cout<<endl;
}

int main()
{
    //create a linked list    
    node *head;
    node*t1,*t2,*t3,*t4;
    t1=new node;
    t2=new node;
    t3=new node;
    t4=new node;

    t1->data=1;
    t2->data=2;
    t3->data=3;
    t4->data=4;

    head=t1;
    t1->next=t2;
    t2->next=t3;
    t3->next=t4;

    //the linked list is 1 2 3 4
    cout<<"the original linked list is ";
    display(head);

    //now, delete t3
    delete t3;
    t3=NULL;

    //here, it is desired that the linked list prints 1 2
    //but the linked list prints 1 2 0 4 
    cout<<"the linked list after deleting t3 is ";
    display(head);

    //I don't understand why t2->next is not null
    //despite the fact that t2->next=t3
    //and I have deleted t3
    if(t2->next) cout<<endl<<"t2->next is not null"<<endl;

   return 0;
}

无法在不访问 t2 的情况下删除 t3,因为您的列表是 单独 linked

如果你想删除 t3t4 你应该这样做:

t2->next=NULL;
delete t3;
delete t4;

如果您只想删除列表中间某处的单个节点(例如t3),您还必须调整 next link 来自 t2:

t2->next=t4;
delete t3;

否则指向删除的节点

你不能。除非您在其他地方显式存储指向 t3 的指针(这有点违背此列表的要点),否则指向 t3 现有指针由 t2。因此,要使用 t3任何事情,您需要访问 t2.

编辑:但除了这个小细节,这里可能是您想要的。

void deleteNth(node* start, int N)
{
  node* prev = NULL, curr = start;
  while (N-- > 0 && curr != NULL)
  {
    prev = curr;
    curr = curr->next;
  }
  if (curr != NULL && N <= 0)
  {
    prev->next = curr->next;
    delete curr;
  }
}

N.B。从 1 而不是 0 开始计数 N