- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要在列表的开头插入一个节点,我该怎么做?
使用此代码:
while(tmp!=NULL){
printf("__________");
printf("\nCodigo: %d\n",tmp->code);
printf("Nombre: %s\n",tmp->name);
printf("Apellido: %s\n",tmp->last);
tmp = tmp->next;
};
我打印列表,这是我看到的:
科迪戈:3
姓名:第三名
阿佩利多:节点
科迪戈:2
名称:secc
阿佩利多:节点
科迪戈:1
名称:第一
阿佩利多:节点
所以,如果我在开头插入一些内容,我应该会看到
科迪戈:3
姓名:第三名
阿佩利多:节点
科迪戈:2
名称:secc
阿佩利多:节点
科迪戈:1
名称:第一
阿佩利多:节点
科迪戈:4
名号:第四名
阿佩利多:节点
我该怎么做?我试过这个:
tmp_aux = lista;// creating an aux list
while(tmp_aux->next!=NULL){
tmp_aux->next = tmp_aux;
}; // i used this becouse the last printed (up) is the first node
new_aux = (struct nodo* ) malloc(1*sizeof(struct nodo));
printf("ingrese el codigo: ");
scanf("%d",&(*new_aux).code);
printf("ingrese el nombre: ");
scanf("%s",&(*new_aux).name);
printf("ingrese el apellido: ");
scanf("%s",&(*new_aux).last);
new_aux->next = tmp_aux;// then i put the aux on the next of my new node
lista = new_aux;// and make my list the new one
最佳答案
我个人认为应该首先打印第一个节点(引用评论),但我认为这只是语义。
在我使用链表的所有时间里,我都使用了head
和tail
指针。 head
指针指向列表中的第一项,tail
指针指向列表中的最后一项。每次从列表中添加和删除项目时,都需要一些额外的簿记来使这些保持最新,但我认为这是值得的。任何需要您遍历列表的操作(搜索特定节点、打印所有项目等)都可以更简单地完成,因为您从 head
开始并转到 tail
。像下面这样的东西应该让你开始,这并不意味着是一个包罗万象的程序:
static struct nodo *head = NULL, *tail = NULL;
struct nodo* insert_at_head(struct nodo* new_aux)
{
if (head == NULL && tail == NULL)
{
// our list is empty; any item inserted is both the beginning and end
head = new_aux;
tail = new_aux;
new_aux->next = NULL; // only 1 item in the list, there is no next element
}
else
{
// if maintained properly, this should be the only other possibility
new_aux->next = head; // new_aux is the new head of the list, so the previous head is now the 2nd item
head = new_aux; // make new_aux the new head of the list
}
// in fact, since head = new_aux happens in both branches, that should just go here
return head; // this could be a void function, but returning head and checking that it equals new_aux shows that new_aux is now the head of the list
}
struct nodo* remove_head()
{
if (head != NULL) // our list is not empty, so it does in fact have a head
{
struct nodo* temp = head
head = head->next; // even if there is one item in the list, head->next should be NULL, so now head is NULL
free(temp);
}
else
{
// this means our list is empty, optionally print an error message or warning "Trying to delete head from empty list!"
return NULL;
}
return head;
}
// now iterating over all the nodes is easy, you just have to go from head to tail.
void print_list()
{
struct nodo* cur_aux;
for (cur_aux=head; cur_aux!=NULL; cur_aux=cur_aux->next)
{
// print whatever you want here
}
}
// you can have several other functions, for manipulating the list. Their prototypes *might* look like the following:
// do not forget to maintain head and tail pointers for all of these!
struct nodo* insert_at_tail(stuct nodo* new_aux); // similar to insert_at_head(), except now you want to make the current last node the 2nd to last node
struct nodo* locate_aux(const struct nodo* aux); // iterate head to tail and return the node that matches all fields of struct nodo, return NULL if not found
void delete_aux(struct nodo* aux); // iterate through the list and delete aux if found
void clean_up_list(); // iterate from head to tail and delete all items
struct nodo* insert_aux_after(struct nodo* insert_after, struct nodo* new_aux); // this will insert new_aux after insert_after
int main(int argc, char* argv[])
{
// something like this
struct nodo* new_aux = malloc(sizeof(struct nodo));
struct nodo* new_aux2 = malloc(sizeof(struct nodo));
struct nodo* new_aux3 = malloc(sizeof(struct nodo));
// fill in the fields for each new_aux
if (insert_at_head(new_aux) != new_aux)
{
// some error happened on insertion,, handle it
}
insert_at_head(new_aux2);
insert_at_head(new_aux3);
print_list();
// the output should print new_aux3, then new_aux2, and finally new_aux
clean_up_list();
return 0;
}
您可以将 head
和 tail
调整为列表中的第一项或最后一项,但一般约定将 head
标记为列表中的第一项列表。我可能会为其他原型(prototype)填写一些代码。事实上,你可以在没有 tail
指针的情况下实现上面的所有内容,只需在 head
处开始对列表的所有迭代,然后一直到 ->next == NULL
。您还可以考虑维护一个 static size_t num_aux
来保持列表中项目数量的运行计数。当尝试从列表中删除项目时,这对于确定成功或失败特别有帮助。我怀疑如果你用 google 搜索链表教程,你会得到比我提供的代码好得多的代码,但我展示的至少应该是处理链表的一种合理方法。
关于c - 在列表的开头插入节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169248/
我正在使用 JavaFX 8 创建一个应用程序。我使用拖/放动态更改网格 Pane 的内容。我希望每行或每行/列迭代 GridPane 内容。JavaFX 允许通过指定行和列在 GridPane 中添
我正在尝试将图像拖放到div上。图像没有被拖到div上并给出以下错误 Uncaught TypeError: Failed to execute 'appendChild' on 'Node': pa
我正在 android studio 中创建内部构建 AR 导航。我正在寻找一种方法将 anchor 与其他 anchor 或 anchor 节点/节点“连接”起来。我不确定使用哪一个。基于我将强制用
我在 Hive 上运行一些作业:首先是 4 节点,然后是 2 节点。令我惊讶的是,我的 2 节点性能比我的 4 节点更好。 首先,我在一个 4 节点(4 个事件节点)上运行查询,然后关闭 2 个节点(
我有 Node* current ,我在其中存储指向列表“顶部”当前节点的指针。当我将一个新节点设置为当前节点时,出现错误: '=' : cannot convert from 'CircularDo
我是 dcos Mesos 的新手,在本地 Ubuntu 机器上安装了 dc os。 我可以查看 dcos 仪表板。 但我无法使用 dcos node ssh --master-proxy --lea
在 JavaFX 中,是否有类似 setLayout(); 的东西?或 setBounds(); ? 例如,我想将按钮定位到我想要的位置。 最佳答案 JavaFX 场景图上的所有内容都是 Node .
我正在开发一个 JavaFX 应用程序,其中我开发的类(从 javafx.scene.Parent 扩展)是根据用户在 ListView 控件中单击的条目动态创建的。 只是要清楚这个节点,它不是使用像
我正在尝试为节点-边缘关系创建一个类图,因为它可以在有向图中找到。我想传达的是,Nodes 引用了 Edges,Edges 也引用了 Nodes。每个 Edge 都恰好需要两个 Node(源和目标)。
在mapreduce作业期间,单个任务将在随机节点上运行,是否有任何方法限制应在其中运行任务的节点? 最佳答案 Hadoop不会选择节点来随机运行任务。考虑到数据局部性,否则将有很多网络开销。 任务与
有什么区别: a) nodetool 重建 b) nodetool 修复 [-pr] 换句话来说,各个命令到底是做什么的? 最佳答案 nodetool重建:类似于引导过程(当您向集群添加新节点时),但
我已将第一个 OneToMany 关系添加到我的 hibernate 3.6.10 项目中。这是一个类: /** * */ package com.heavyweightsoftware.leal
是否有可能找到正在监听触发当前函数的事件的元素? 在下面的代码中,event.target 返回 #xScrollPane 和 event.currentTarget 和 event 的最低子节点.f
我正在尝试覆盖我数据库中的一些数据。结构很简单,就是: recipes { user_1{ recipe_1{data} recipe_2{data} } user_2{
我使用 setInterval 来运行该函数,但它会多次执行函数 2... 如何在输入中插入一个值后执行函数 第一个输入与其余输入的距离不同 如何在插入 val(tab 选项)后将插入从 1 个输入移
我不知道代码有什么问题,但在 visual studio 中不断收到这些错误消息。 Error 18 error C1903: unable to recover from previous e
我正在尝试从其类中获取 SharePoint 搜索导航节点的对象。 var nodes = $("div.ms-qSuggest-listItem"); 我正在获取节点对象,现在想要获取“_promp
D:\nodeP>node main.js module.js:327 抛出错误; ^ 错误:在 Function.Module 的 Function.Module._resolveFilename
struct node{ int key, prior, cnt, val; node *l, *r; node(){} node(int nkey) : key(nkey),
我有以下代码使用迭代器将项目插入双链表。这就是我们被要求这样做的方式。代码有效,但问题是我有 24 字节的绝对内存泄漏。 NodeIterator insert(NodeIterator & itrP
我是一名优秀的程序员,十分优秀!