在ITH位置添加节点
adding node at ith position
我想创建一个大小为5的链接列表,并在ITH位置添加一些节点。
我将在链接列表的随机位置上添加节点。
这是在位置0中添加节点的样子。
0
+---------+
| 1 |
+---------+ --> NULL
| next |
+---------+
这是在位置5处添加节点的样子。
0 1 2 3 4
+---------+ +---------+ +---------+ +---------+ +---------+
| 1 | | Empty | | Empty | | Empty | | 2 |
+---------+-------------------------------------------->+---------+-->NULL
| next | | node | | node | | node | | next |
+---------+ +---------+ +---------+ +---------+ +---------+
因此节点1,2,3为空,0链接到4。
这是在位置1处添加节点的样子。
0 1 2 3 4
+---------+ +---------+ +---------+ +---------+ +---------+
| 1 | | 2 | | Empty | | Empty | | 2 |
+---------+-->+---------+------------------------------>+---------+-->NULL
| next | | next | | node | | node | | next |
+---------+ +---------+ +---------+ +---------+ +---------+
因此节点2,3是空的,0链接到1和1链接到4。
我试图实施它,但没有打印任何东西。请指教。谢谢。
#include <iostream>
struct node
{
int x;
node *next;
};
node * head = NULL;
node * newNode;
node * temp;
void addNode(int pos, int size)
{
/*if head is null, initialize a new node
set data = 1 for head;
*/
if(head == NULL && pos == 0)
{
newNode = new node;
head = newNode;
head->x = 1;
temp = head;
temp->next=NULL;
}
else
{
/*
Adding a node at ith position.
1. check if the the position is less than the size of the link list.
2. set the temp position to be 0(head)
3. use the temp pointer and go to the ith postion.
4. create new node at ith position.
5. set data = 2 for the node at ith position.
*/
if (pos < size)
{
for(int i=0; i < size; i++)
{
temp = head;
temp = temp->next;
if (pos == i)
{
newNode = new node;
temp = newNode;
temp->x = 2;
temp->next = NULL;
}
}
}
}
}
void Print() {
while(head->next != NULL)
{
std::cout<< head->x << std::endl;
head=head->next;
}
}
int main()
{
int input = 0;
while (true) {
std::cout << "1. Add Node and Print " << std::endl;
std::cin >> input;
switch ( input ) {
case 1:
addNode(0, 5);
addNode(5, 5);
addNode(1, 5);
Print();
break;
default:
std::cout<<"Bad Input";
break;
}
std::cin.get();
}
return 0;
}
当我解开您的问题时,您要编写的函数,该功能将在指定的索引处设置节点的值,并且如果索引的索引大于列表的当前大小,则会自动扩展您的列表。(如果我错了,请纠正我)
这很容易。当计数器i
(请参阅下面的代码)小于指定位置时,您需要迭代列表。如果列表比创建节点小,并将其值标记为某些值EMPTY
。当计数器等于位置时,然后将节点的值设置为 value
。
#include <iostream>
struct node {
int data;
node* next;
};
#define EMPTY -1
node * head = NULL;
void setNode(int pos, int value) {
if(head == NULL) {
head = new node;
head->data = EMPTY;
head->next = NULL;
}
node* p = head;
for(int i = 0; i < pos; i++) {
if(p->next == NULL) {
p->next = new node;
p->next->data = EMPTY;
p->next->next = NULL;
}
p = p->next;
}
p->data = value;
}
void print() {
node* p = head;
while(p != NULL) {
std::cout << p->data << " ";
p = p->next;
}
std::cout << std::endl;
}
int main() {
setNode(0, 1);
setNode(5, 2);
setNode(1, 3);
print();
return 0;
}
在您的代码中,印刷功能中也存在错误:
- 您更改了
head
变量。 - 和列表的最后值未打印,因为
while
循环中的条件。
相关文章:
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何将节点添加到链表
- 在 C++ 中使用 temp 变量将节点添加到链表的末尾
- 将节点添加到链接列表中,而无需明确分配内存空间(无需使用新)
- 推送功能(将新节点添加到列表顶部)C
- 倒排索引节点添加字
- 制作完成后是否可以将节点添加到图形中
- 嗨,我正在尝试将集合的特定节点添加到列表中,该列表位于哈希表中
- C++链表将新节点添加到列表的开头
- 如何将节点添加到链表C++的前面?我想多了这个概念
- 用独特的指针将节点添加到树上
- 将节点添加到链表的末尾
- 将新节点添加到列表中并动态命名
- C++:尝试将新节点添加到链表会产生"线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)"错误
- 在c++中按字母顺序将节点添加到链表中
- 将边缘节点添加到没有边缘的顶点时出现 Seg 错误
- 当我尝试将新节点添加到列表中时,我收到错误消息"no matching function call"
- 如何在C++中将文件路径作为节点添加到树或堆栈中
- 将多个节点添加到树C++中
- C++将节点添加到链表的开头一次后失败.其他方法也有问题