gpt4 book ai didi

C++删除相似节点链表

转载 作者:行者123 更新时间:2023-11-30 04:14:42 25 4
gpt4 key购买 nike

对于家庭作业,我需要删除该数字传入的所有相似节点。例如,如果我在列表中

35个5个4

5将从链表中删除,我将结束

34

这个类不允许使用std库,这里是头文件

    namespace list_1
{
class list
{
public:
// CONSTRUCTOR
list( );
// postcondition: all nodes in the list are destroyed.
~list();
// MODIFICATION MEMBER FUNCTIONS
//postcondition: entry is added to the front of the list
void insert_front(const int& entry);
//postcondition: entry is added to the back of the list
void add_back(const int& entry);
// postcondition: all nodes with data == entry are removed from the list
void remove_all(const int& entry);
// postcondition: an iterator is created pointing to the head of the list
Iterator begin(void);

// CONSTANT MEMBER FUNCTIONS
// postcondition: the size of the list is returned
int size( ) const;
private:
Node* head;
};

}

我可以理解如何删除列表的前面和后面。但出于某种原因,我无法全神贯注地浏览列表并删除所有传入的数字。任何帮助!谢谢

编辑以包含 Node.h

#pragma once

namespace list_1
{
struct Node
{
int data;
Node *next;

// Constructor
// Postcondition:
Node (int d);
};
}

最佳答案

有两种方法可以做到这一点。第一种是遍历列表并删除节点。这很棘手,因为要做到这一点,您必须保留指向前一个节点的指针,以便您可以更改其 next 值。删除节点的代码如下所示(假设 current 是当前节点,prev 是前一个节点)

Node* next = current->next;
delete current;
prev->next = next;

不过,维护对前一个节点的引用可能有点乏味,所以这是另一种方法。在此方法中,您基本上创建了一个新列表,但不插入 data 等于 entry 的节点。

代码可能看起来有点像这样

void list::remove_all(const int &entry)
{
Node* newHead = NULL;
Node* newTail = NULL;
Node* current = head;

// I'm assuming you end your list with NULL
while(current != NULL)
{
// save the next node in case we have to change current->next
Node* next = current->next;
if (current->data == entry)
{
delete current;
}
else
{
// if there is no head, the set this node as the head
if (newHead == NULL)
{
newHead = current;
newTail = current;
newTail->next = NULL; // this is why we saved next
}
else
{
// append current and update the tail
newTail->next = current;
newTail = current;
newTail->next = NULL; // also why we saved next
}
}
current = next; // move to the next node
}
head = newHead; // set head to the new head
}

注意:我没有测试这个,我只是在脑海中打字。确保它有效。 =)

希望对您有所帮助! ;)

关于C++删除相似节点链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com