提问人:Heroking18 提问时间:10/4/2022 最后编辑:Vlad from MoscowHeroking18 更新时间:10/4/2022 访问量:140
C 如何在单个链表中迭代和添加所需节点后的新节点
C how to iterate and add a new node after a desired node in single Linked List
问:
typedef struct ITEM {
int value;
struct ITEM *next;
}ITEM;
int add_after(ITEM *list, ITEM *c_item, int value)
{
ITEM *elem;
//if head is NULL, it is an empty list
if(c_item == NULL || list == NULL)
{
return -1;
}
//create a new node
elem = malloc(sizeof(ITEM));
if(elem == NULL)
{
return -1;
}
elem->value = value;
// iteration
while(list != NULL)
{
if(list == c_item)
{
elem->next = list->next;
c_item->next = elem;
return 1;
}
list = list->value;
}
return 0;
}
它应该做什么:应该等于 .找到相等的节点后,它应该创建一个新节点并将该节点放在 的前面。c_item
list
elem
c_item
我的代码的作用:是 HEAD 值并与该值进行比较,如果它不相同,则转到列表中的下一个。找到相等的节点后,它将节点添加到前面的列表中。list
c_item
list
value
elem
问题:
这仅适用于 中的 1 个现有节点。如果有 2 个节点,则它会卡在 .list
list = list->value;
// Linked List 10->20->30->NULL
//Input:
c_item = 20
elem = 100
//Output:
10->20->100->30->NULL
答:
0赞
jxh
10/4/2022
#1
你似乎已经掌握了你想做的大部分事情的基础知识。让我们试着重新组织你的作品,也许你可以接近你想要的解决方案。
我会首先使用注释来描述我想在函数中完成什么。
int add_after (ITEM *list, ITEM *c_item, int value) {
// Check c_item and list are not NULL
// Check if c_item is in list
// Create new elem with value
// Add new elem after c_item
}
然后,我会编写完成这些事情的代码。
- 检查
c_item
和列表
是否为 NULL
if (! (c_item && list)) return -1;
- 检查
c_item
是否在列表中
if (! list_has_item(list, c_item)) return -1;
- 创造
具有价值
的新elem
ITEM *elem = create_item(value);
if (elem == NULL) return -1;
在c_item
后添加新的elem
ITEM *old_after = c_item->next;
c_item->next = elem;
elem->next = old_after;
最后一点实际上是你问的具体问题。该实现会记住 之后的 ,使新元素位于它之后,然后将 过去 的 after 放在新元素之后。c_item
c_item
在没有临时的情况下,也可以使同样的事情发生。更清楚的是,还有什么值得商榷,但如果你好奇,可以尝试将上面的三行重写成两行。
我想你已经了解如何检查一个项目是否在列表中以及如何创建一个新项目,所以我将把这些留给你来实现。
评论
0赞
Heroking18
10/4/2022
嗨,很抱歉回复晚了,但我刚刚注意到这不是一个遍历列表的好代码,因为它基本上是指针 = int,这是错误的转换。 会给我一个.您如何迭代到列表而不会出现错误?list = list->value;
list = list->next;
NULL
0赞
jxh
10/4/2022
如果代码返回 0,则不在 中。for(;list && (list != c_item);list = list->next) {} return list;
c_item
list
上一个:通过引用传递向量,然后调用清除
下一个:多个列表共享同一引用
评论