有人可以向我解释这个链表是如何工作的吗?



链表编码如下。这很简陋,但我不太明白一些东西。

#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <time.h>
#include <fstream>
using namespace std;
int main()
{
struct node {
int data;
node* next;
};
node* head = NULL;
node* cur = NULL;
string condition = "Yes";
while (condition != "No") {
cout << "What is the next value of the linked list " << endl;
int value;
cin >> value;
node* newnode = new node;
newnode->data = value;
newnode->next = NULL;

if (head == NULL) {
head = newnode;
cur = newnode;
newnode = NULL;
}
else {
cur->next = newnode;
cur = newnode;

}

cin >> condition;
}
cout << "These are your values " << endl;
int i = 0;
while (i < 7) {
cout << head->data << endl;
head = head->next;
i++;
}
}

在函数中,当它应该向链表添加一个新值时,它会

else {
cur->next = newnode;
cur = newnode;

}

但据我了解,如果我更改第一行中 newnode 指针旁边的值,我更改第二行中的整个节点不会覆盖它吗?这是否意味着节点丢失了下一个节点的地址,这意味着它在cur ->next中的地址为零?

有人可以向我解释这是如何工作的吗?

var cur 只是一个指针,第一次指向最后一个 newnode,而 cur->next'地址是当前的 newnode,当执行第二行时,cur 地址发生了变化,但最后一个 newnode 没有变化,因此 cur->next 不会为零,它指向当前的 newnode。

我建议你改变迭代链表的方式。这不是一个正确的方法。你正在做的方式也使它看起来比实际更复杂。

您可以使用循环或递归函数。 以下是一些示例

void linkedList::insert(int val){

if(root == nullptr){
root = new Node;
root->data = val;
root->next = nullptr;
} else {
addUp(val);
}
}
void linkedList::addUp(int val){
Node *temp = new Node;
Node *head = root;

while(head != nullptr){
temp = head;
head = head->next;
}
Node *node = new Node;
node->data = val;
node->next = nullptr;
temp->next = node;
}

递归的

Node* head = NULL; 
head = insertEnd(head, 6); 
Node *newNode(int data) 
{ 
Node *new_node = new Node; 
new_node->data = data; 
new_node->next = NULL; 
return new_node; 
} 

Node* insertEnd(Node* head, int data) 
{ 
if (head == NULL)  
return newNode(data); 
else 
head->next = insertEnd(head->next, data); 
return head; 
} 

相关内容

  • 没有找到相关文章

最新更新