链表插入问题
Linked List insertion issue
我正在尝试链表,我的insertNode1函数有点问题。该功能假定在用户输入的节点之后插入一个新节点。结果并没有显示出我想要显示的内容。我希望数字5在3之后,但它没有显示出我想要的样子。
#include <iostream>
using namespace std;
class List {
struct node {
float data;
node* next;
};
node* head;
public:
void appendNode(float);
void insertNode(float);
void insertNode1(float,float);
void deleteNode(float);
void displayList();
List(){
head = NULL;
}
~List(){
node *nodePtr, *nextNode;
nodePtr = head;
while (nodePtr != NULL){
nextNode = nodePtr->next;
delete nodePtr;
nodePtr = nextNode;
}
}
};
void List::appendNode(float d)
{
node *newNode, *nodePtr;
newNode = new node;
newNode->data = d;
newNode->next = NULL;
if (!head){
head = newNode;
}
else {
nodePtr = head;
while (nodePtr->next){
nodePtr = nodePtr->next;
}
nodePtr->next = newNode;
}
}
void List::insertNode(float d){
node *newNode, *nodePtr, *prevNode=NULL;
newNode = new node;
newNode->data = d;
if (head== NULL)
{
head = newNode;
newNode->next = NULL;
}
else {
nodePtr = head;
while (nodePtr != NULL && nodePtr->data < d){
prevNode = nodePtr;
nodePtr = nodePtr->next;
}
if (prevNode == NULL){
head = newNode;
newNode->next = nodePtr;
}
else {
prevNode->next = newNode;
newNode->next = nodePtr;
}
}
}
void List::insertNode1(float p, float d){
node *newNode, *nodePtr, *selectedNode=NULL;
newNode = new node;
newNode->data = d;
nodePtr = head;
selectedNode = nodePtr;
selectedNode->data = p;
if (head != NULL){
head = newNode;
newNode->next = NULL;
}
else {
while (nodePtr->next != NULL && nodePtr->data != p){
nodePtr = nodePtr->next;
}
if (selectedNode == NULL){
head = newNode;
selectedNode->next = NULL;
}
else {
selectedNode->next = newNode;
}
}
}
void List::deleteNode(float da){
node *nodePtr, *previousNode=NULL;
if (head == NULL){
return;
}
if (head ->data == da){
nodePtr = head->next;
delete head;
head = nodePtr;
}
else{
nodePtr = head;
while (nodePtr != NULL && nodePtr->data != da){
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
previousNode->next = nodePtr->next;
delete nodePtr;
}
}
void List::displayList(){
node *nodePtr;
nodePtr = head;
while (nodePtr!= NULL){
cout << nodePtr->data << endl;
nodePtr = nodePtr->next;
}
}
int main(){
List lobj;
lobj.appendNode(3);
lobj.appendNode(6.4);
lobj.appendNode(4.5);
lobj.appendNode(7.8);
lobj.insertNode(1.5);
lobj.displayList();
cout << "after deleting and adding a new node" << endl;
lobj.deleteNode(6.4);
lobj.displayList();
lobj.insertNode1(3, 5);
lobj.displayList();
system("pause");
}
在void List::insertNode1(float p, float d)
函数的开头:
nodePtr = head;
selectedNode = nodePtr;
selectedNode->data = p;
这里,selectedNode
指向列表的head
,您似乎用p
的值覆盖了该节点的数据,我忍不住觉得这不是您想要做的。
List::insertNode1
内部存在一些问题。
nodePtr = head;
selectedNode = nodePtr;
selectedNode->data = p;
此处selectedNode
指向head
,但随后将第一个数据值设置为p。
if (head != NULL){
head = newNode;
newNode->next = NULL;
}
此部分仅在head
不为空时执行。这意味着每次运行时都会删除整个列表。这就是为什么对list::displayList
的最后一次调用只打印5
的原因。
if (selectedNode == NULL){
head = newNode;
selectedNode->next = NULL;
}
这里selectedNode
是NULL
。首先,您将head
设置为一个新节点,但这不会更改selectedNode。如果你在一个空列表上运行这个方法,你的程序会在这里出错。您应该在此处将head
或newNode
中的下一个设置为NULL
,而不是selectedNode
。
else {
selectedNode->next = newNode;
}
这里CCD_ 18仍然指向CCD_。您可以更改nodePtr
,但这不会同时更改selectedNode
。
相关文章:
- 屏幕插入运算符<<的运算符过载问题
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 插入操作的二叉搜索树代码问题
- 当索引位于末尾和空数组时,向数组插入元素时出现问题
- 在链表中的某个点插入时出现问题,C++中的继承函数
- 通过C ODB插入汉字时的问题
- 在我的Quadtree中插入点问题
- 自己的C++列表类实现(插入函数)出现问题
- 单个链表,节点插入最低到最高节点值的问题
- BST插入的这段代码有什么问题?
- 在二叉搜索树中插入时出现问题
- 通过 ODBC C++将带有日期时间的记录插入 SQL Server 2014 的问题
- 二叉搜索树插入数据问题
- 我的二叉搜索树插入逻辑有什么问题?
- 测试外壳,插入和快速的程序问题
- 二叉搜索树在插入功能方面有问题
- 尝试在链表程序的末尾进行更简单的插入.小问题需要帮助
- 在二叉树中插入/查找问题
- 我的插入排序代码有问题
- 在将结构插入设置C++时遇到问题