我有两个循环双链表,与head和integer元素(无序)相连。要删除的第一个列表中包含第二个列表中的值。你的工作怎么样?如何排除这种情况?需要搜索第一个列表中的值才能删除第二个列表?我怎样才能和他们合作?你能解释一下解决这个问题的算法吗?
例如:
我有两个循环的双链表,带有head。
L1:40100902003266
L2:60146308090
我想删除第一个列表中第二个列表中的值。第一个列表将是:
L1:40100266
我想知道如何使用列表的指针来进行这种排除。我想要伪代码中的一个概念。我已经用C语言创建了代码,但我不明白算法。我需要理解之前如何做。
从编写算法的伪代码开始,然后实现实际功能,可以独立测试。
一般的伪代码是这样的:
for each node in list1
{
if (list2 contains node)
{
remove node from list1
}
}
假设列表和节点的定义如下:
struct Node
{
struct Node *next;
struct Node *prev;
int number;
}
struct List
{
struct Node *head;
}
// these should be instantiated somewhere
struct List* list1;
struct List* list2;
所以,函数的骨架应该是这样的:
struct Node* node = list1->head;
while (node != null)
{
// prepare the next node early
struct Node* next = node->next;
// check if list2 contains a matching node
if (match(list2, node->number))
{
// remove the node properly,
// updating whatever you need to update
remove(list1, node);
}
// if it's circular, check if this
// is the last node
if (next == list1->head)
break;
node = next;
}
因此,现在只剩下实现两个函数:
// returns true if any node in list contains the specified number
bool match(struct List* list, int number);
// removes the node from the list
void remove(struct List* list, struct Node* node);
本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。
主要内容:双向链表的创建目前我们所学到的 链表,无论是动态链表还是 静态链表,表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,通常称这类链表为 单向链表(或 单链表)。 虽然使用单链表能 100% 解决逻辑关系为 "一对一" 数据的存储问题,但在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 "从前往后"
双向链表 结构体 struct rt_list_node 双向链表节点 更多... 宏定义 #define rt_container_of(ptr, type, member) ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member))) 获取type结构体中member成员在这个结构体中的偏移 #de
双向链表 Linux 内核自己实现了双向链表,可以在 include/linux/list.h 找到定义。我们将会从双向链表数据结构开始内核的数据结构。为什么?因为它在内核里使用的很广泛,你只需要在 free-electrons.com 检索一下就知道了。 首先让我们看一下在 include/linux/types.h 里的主结构体: struct list_head { struct l
我用C语言编写了双重链接列表的代码,它从头到尾的遍历很好,但从尾(end)到头的遍历陷入了无限循环,只打印最后一个节点的数据,我不知道出了什么问题。
我有一个头和lastNode的参考。嗨我有个问题。当我删除双向链表中的最后一个节点时,我必须将该节点的前一个引用设置为空,或者我可以离开它。我在删除lastNode时做了这样的事情。 当我使用toString方法时,它会按预期打印。只是想知道是否有必要将旧的last node prev设置为null。或者垃圾收集器只是删除它,因为没有对它的引用,即使旧节点仍然有对链接列表中某个节点的引用