我正在尝试从列表中删除节点。我必须使用我用来从列表中删除第一个节点的函数,然后我必须添加其他节点(在我想要删除的节点之前)。函数删除列表开头的节点,并添加到列表的开头。
我试过这段代码:
List* Delete_theNode(int the_node){
List *temp;
if(head->next == NULL)
{
printf("empty list..");
}
else
{
for(temp = head; temp!= NULL; temp = temp-> next)
{
Delete_node();
}
if(temp->number == the_node)
{
Delete_Node();
}
else
{
printf("\n%d there is no such a node\n", the_node);
}
}
}
答案 0 :(得分:1)
你的代码中有很多错误!
此结构更像是链接列表,而不是堆栈。
您需要知道上一个节点才能删除该节点并再次使用下一个节点链接该列表。
此外,您可能必须在删除节点之前释放已删除节点上的内存。
理想情况下:
position:fixed
答案 1 :(得分:0)
使用递归再次添加已删除的节点。我试图修复,但没有编译,所以可能会有一些语法错误。请验证
Stack* Delete_theNode(int the_node){
if(head == NULL)
{
printf("empty stack..");
}
else
{
if((head != NULL) && (head->number != the_node))
{
Stack *deletedNode = Delete_Node();//Delete top node & reset the head
Delete_theNode(the_node); //Recursive Call
Add_toStack(deletedNode); //Add node and reset the head
}
else if(head->number == the_node)
{
Delete_Node();
}
else
{
printf("\n%d there is no such a node\n", the_node);
}
}
}
答案 2 :(得分:0)
我是使用 struct 完成的。希望它会对你有所帮助。
#include<iostream>
using namespace std;
struct node
{
int number;
node *next;
};
node a, b, c, d, e, *head, *current, *old, myNewNode;//global
bool flag, token;//global
int deletionInt, searchInt, newInt;//global
void Deletion ()
{
cout << "Enter the integer to be deleted: " ;
cin >> deletionInt;
old = head;
current = head;
while(1)
{
if(head==NULL)
{
cout << "Your list is empty, nothing to delete here!" << endl;
break;
}
if(deletionInt==current->number)
{
if(current == head)
{
head= current->next;
current = head;
}
else
{
old->next= current->next;
current = old;
}
break;
}
if(current->next==NULL) break;
else
{
old = current;
current = current->next;
}
}
}