Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何对正在增长的链表中的两个节点进行所有可能的比较_C_Linked List - Fatal编程技术网

C 如何对正在增长的链表中的两个节点进行所有可能的比较

C 如何对正在增长的链表中的两个节点进行所有可能的比较,c,linked-list,C,Linked List,我有一个程序,我在链表中有一些初始节点,我需要在函数中放置一对节点resolve(node*node 1,node*node2),这个函数可以生成一个新节点,也可以不生成新节点,我不允许多次比较同一对节点,函数停止的条件是不再有可比较的不同节点 °在末尾插入单链表的元素 我已经尝试解决这个问题两天了,但是我想不出一种方法来比较所有可能的节点,因为可以生成更多的节点,这使得问题很难解决 @编辑 黑点是分配开始的第一个节点 resolve(node* node1, node* nodesafter

我有一个程序,我在链表中有一些初始节点,我需要在函数中放置一对节点
resolve(node*node 1,node*node2)
,这个函数可以生成一个新节点,也可以不生成新节点,我不允许多次比较同一对节点,函数停止的条件是不再有可比较的不同节点

°在末尾插入单链表的元素

我已经尝试解决这个问题两天了,但是我想不出一种方法来比较所有可能的节点,因为可以生成更多的节点,这使得问题很难解决

@编辑

黑点是分配开始的第一个节点

resolve(node* node1, node* nodesafter)
elipse是生成的节点

但生成的唯一节点未与顶部的节点进行比较


在本例中,进行了6次比较,在我的代码中只进行了5次比较。

好吧。。。您可以从第一个节点循环到最后一个节点,并将所有下一个节点与当前节点进行比较。 在这种情况下,请确保比较了所有以前的节点。 例如(JavaScript):


我想是单链表吧?(例如,否
prev
指针?)。您可以使用两个级别的迭代,从
head
next
开始。在内部迭代中从
next
迭代到
tail
,然后递增
head->next
,然后再次执行。非常低效,但可行。@DavidC.Rankin这是一个没有头的单链接列表。你能出示一些伪代码吗?你说的我不太明白。当然,这就像嵌套循环一样,你将迭代
type*outer=head;while(outer->next!=NULL){type*inner=head->next;while(inner!=NULL){/*进行比较*/;inner=inner->next;}outer=outer->next}
(其中
type
是用于
节点的任何结构)@DavidC.Rankin谢谢。那么,新节点也必须在末尾插入?并与任何其他节点进行一次精确比较?一次完整的
N*(N-1)/2
pass可以生成多少个新节点?是的,像这样。我可能会用不同的编码,但是如果你想把这些片段放在一起,只要它们工作正常并且可读,这并没有什么错。即使是
在这里也有意义。(和
while
do-white
)一样。@Roman Muravchuck我在这段代码中发现了一个问题,我想我没有很好地表达我的想法,你能检查我的编辑吗?新创建的节点没有与以前的节点相比的问题?在这种情况下,需要将新创建的节点与当前和以前的节点进行比较。在resolve()函数中执行此操作。@RomanMuravchuck函数resolve用于确定是否可以从2个节点生成一个新节点,我可以在其中执行哪些操作以确保新节点将与以前的节点进行一次精确比较?示例(同样是JS):
函数resolve(curNode,nextNode){if(checkConditionForNewNode()){var newNode=list.push(generateSomeData());resolve(curNode,newNode);var current=list.first;while(current!==null&¤t!==curNode){resolve(current,newNode);current=current.next;}}
如果总是选中“下一个”节点,则不必考虑与上一个节点进行双重比较。
var list = new LinkedList();
fillList(list);
var current = list.first;
while(current.next !== null){
    var current2 = current.next;
    do{
        resolve(current, current2);
        current2 = current2.next;
    }while(current2 !== null);
    current = current.next;
}