typedef struct tape
{
char symbol;
struct tape *next;
struct tape *prev;
}tape;
tape *pt;
void ShowCurrentCombination()
{
tape currentNode;
currentNode = *pt;
while(pt->prev != NULL)
pt=pt->prev;
while(pt->next != NULL)
{
if(pt == ¤tNode) //this is never true :(
putc("[q]",stdout);
putc(pt->symbol,stdout);
pt=pt->next;
}
putc(pt->symbol,stdout);
}
此函数应显示列表的内容,列表左侧用“[q]”标记当前元素。不幸的是,只显示普通数据。为什么?
为了完整起见,我来介绍一下初始化列表的函数:
void GenerateInputTape(int n)
{
int i;
pt=(tape*)malloc(sizeof(tape));
pt->symbol='B';
pt->prev=NULL;
pt->next=(tape*)malloc(sizeof(tape));
pt->next->prev = pt;
pt=pt->next;
for(i=0;i<2*n+1;i++)
{
if(i < (2*n/2))
pt->symbol='0';
else
pt->symbol='1';
pt->next=(tape*)malloc(sizeof(tape));
pt->next->prev = pt;
pt=pt->next;
}
pt->symbol='B';
pt->next=NULL;
}
注意两者之间的关系
currentNode = *pt;
和
if(pt == ¤tNode)
在第一个示例中,您使用指针pt
指向的内容初始化了currentNode
。在第二个示例中,您正在检查currentNode
的地址是否与列表中某个成员的地址相同(由pt
指向)。应该很清楚为什么这永远都不可能是真的。
你需要做的是保存地址,即指针,而不是它的内容
tape *currentNodePointer = pt;
后来
if(pt == currentNodePointer)
(您的代码可以组织得更好,以避免总是“倒带”到列表的最前面,但这可能是另一天。)
当你检查pt==
您希望
当前节点
不是一个副本,而是等于函数开头的pt
的指针。
tape *currentNode;
currentNode = pt;
...
if(pt == currentNode)
您也不检查最后一个元素。
本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个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
我的双链表有两个虚拟节点,头部和尾部。函数对我来说非常适合,但是当我尝试使用与相同的算法时,它会一直为我打印虚拟节点。为什么会这样? 预期结果: 我的结果:
我正在尝试交换双链接列表中的两个节点。下面是具有交换功能的程序部分。 当我运行这个程序时,在第一个和第二个节点的情况下,它崩溃了。而在任何其他节点的情况下,它提供无限循环输出。(例如:-2- 我知道还有一些关于节点交换的问题,但是我没有找到任何与我的问题相似的问题。请帮帮我...!! 提前谢谢。