- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我一直在研究我的第一个单链表项目,但遇到了困难。我试图实现的算法之一是在用户指定的节点之前插入一个节点。我遇到的问题是,当插入节点时,它被放置在正确的位置,但它也会删除它之前的所有节点。如果我的列表最初包含:1 2 3 4 5我想在4之前插入0结果是:0 4 5
struct node *insertBefore(struct node *start, int data, int x)
{
struct node *marker = NULL;
struct node *prev = NULL;
struct node *temp = NULL;
temp = (struct node*)malloc(sizeof(struct node));
marker = start;
while(marker != NULL && marker->info != x)
{
prev = marker;
marker = marker->link;
}
if(!marker)
{
printf("*Element containing %d not found*\n", x);
return;
}
if(marker == start)
{
temp->info = data;
temp->link = marker;
return;
}
temp->info = data;
temp->link = prev->link;
prev->link = temp;
temp->link = marker;
return;
}
最佳答案
仔细考虑一下你在做什么。
如果您要插入一个节点,则不应创建三个!
temp = (struct node*)malloc(sizeof(struct node));
marker = (struct node*)malloc(sizeof(struct node));
prev = (struct node*)malloc(sizeof(struct node));
解决这个问题的方法是:
// Search for relevant node
while(marker != NULL && marker->info != x) {
prev = marker;
marker = marker->link;
}
// Verify you found somewhere to insert
if(marker == NULL) {
// No x found
return start;
}
// Allocate and initialize node
struct node* insert_node = (struct node*)malloc(sizeof(struct node));
insert_node->info = data;
insert_node->link = marker;
if(prev == NULL) {
// Inserted node is the new start node
start = insert_node;
}
else {
// Relink chain
prev->link = insert_node;
}
// Return the NEW start node.
// This is needed in case the new node is inserted before the original start node!
return start;
如果你的代码巧妙(这意味着思考!),你可以写得非常简单并避免极端情况。极端情况包括:
x
x
再次查看您的代码,您正在做一些不寻常的事情。一是在确定要插入元素之前分配内存:
temp = (struct node*)malloc(sizeof(struct node));
此外,您连续更改 temp->link
两次。
temp->link = prev->link;
prev->link = temp;
temp->link = marker;
如果列表中的第一个元素发生更改,您没有任何机制来更新 start
节点。
关于c - insertBefore 链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46499670/
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用此代码尝试在另一个元素之前添加新内容: var form = document.getElementsByClassName('commentresponse')[0], new
在此代码中: function comrespond(){ function addresform(){ var resid = this.getAttribute('id'),
我还创建了一个jsfiddle来演示我的问题。 我需要在标题之前有时间。 Title 1 Speaker 1 Time 1
使用 jquery 插入多个不同类的正确语法是什么。如果我想在 #container 之前插入 .one .two 和 . Three 该怎么办。 $(".one").insertBefore($('
我正在 jQuery 中执行 insertBefore $.post('/blah', { blah : "some data" }, function(response) { $(respon
如果索引大于实际行数,我不会追加任何内容? var elm = $('tr', tbl).eq(index); if(elm){ row.insertBefore(elm); } else{
我有一个小对象,它必须将新行附加到表中。在大多数情况下它工作正常,但如果某些行中有一个表(在“根”表中),则该对象不会附加到正确的表格!? 我一直在进行一些调试,并找到了全部出错的行。如果设置了 DE
好吧,我一直在研究我的第一个单链表项目,但遇到了困难。我试图实现的算法之一是在用户指定的节点之前插入一个节点。我遇到的问题是,当插入节点时,它被放置在正确的位置,但它也会删除它之前的所有节点。如果我的
我在 JS 中使用 insertbefore() 函数: $('').insertBefore("div.col-lg-9.col-md-9.col-sm-9.col-xs-12"); 但是,当“di
我有一个元素数组,我想在遍历数组时对每个元素使用 inserBefore。它应该在数组中的每个元素之后添加要插入的元素,但它只将它添加到数组中的最后一个元素。我认为这是一个闭包问题,但即使在使用闭包之
https://jsfiddle.net/072uwd1k/ 我正在尝试更改要放置在文本上方的数字位置,使用 insertBefore 就是这样做的,但它会复制其中的 div 数量。
这个问题在这里已经有了答案: Uncaught NotFoundError: Failed to execute 'insertBefore' on 'Node': The node before
在this示例说明 insertBefore() 方法的第二个参数是可选的: The child node you want to insert the new node before. When n
我正在使用 Javassist 将 logback 记录器注入(inject) jar。 在记录器的模式中,我记录行号以及其他细节,如时间、线程、文件等。 使用 ctMethod.insertAfte
我有这个片段,如果屏幕宽度低于 767px,它会将辅助包装器的位置切换到主包装器上方。这很有效,但它只适用于刷新。如何让它在屏幕宽度改变时自动工作? 谢谢!这里完全是新手。 jQuery(docume
我有表,我需要按可用索引对列进行排序(仅 VanilaJS 而不是 jQuery)。我怎样才能做到呢?请参阅示例http://jsfiddle.net/mcqueen/AXF2Y/3/ . 最佳答案
问题 我有几行简单的代码,但无法理解为什么 .insertBefore 每隔四次点击就不起作用。 HTML 1 2 3 change Javascript var but
试图使我在 this 上的回答更加灵活问题: function invertDivs(parentDiv) { var first = document.getElementById(parent
我制作了一个简单的脚本,允许用户使用向上和向下按钮对 div 进行排序。 jsFiddle:http://jsfiddle.net/dZ6rC/5/ 不幸的是,我尝试在鼠标单击时设置移动动画并不会导致
我是一名优秀的程序员,十分优秀!