【发布时间】:2020-05-19 01:54:41
【问题描述】:
所以我有两个链表,每个链表都有一个颜色:
1.black->2.black->3.black->4.black->5.black->NULL
1.red ->2.red ->3.red ->4.red ->5.red ->NULL
我希望函数返回
1.black->2.red ->3.black->4.red ->5.black->NULL
1.red ->2.black->3.red ->4.black->5.red ->NULL。
让我们命名第一个指针,firstBlack 和 firstRed。为了实现这种“棋盘”模式,我通过简单的交换将每个第一个指向的节点切换到另一个列表,将指针推进两个点,然后重复直到我在列表的末尾。
while(firstBlack->next != NULL && firstRed->next != NULL) {
Node * temp = firstBlack->next;
firstBlack->next = firstRed->next;
firstRed->next = temp;
firstBlack = firstBlack->next->next;
firstRed = firstRed->next->next;
}
但是,尽管我相当确定我的逻辑是正确的,但该函数并没有做它应该做的事情。我也遇到了段错误:(
【问题讨论】:
-
拿出铅笔和纸,先画方框和箭头来解决。
-
我有,这就是我对这个逻辑有信心的原因。但是,我只是不确定我的实现是否正确。
-
通过绘制该实现并与您的工作解决方案进行比较来验证实现。 (它跳得太远了。)
-
请注意,经过一次迭代后,名称
firstBlack和firstRed所指向的内容完全错误。firstBlack指向红色的第三个元素,firstRed指向黑色的第三个元素
标签: c++ list pointers linked-list segmentation-fault