typedef struct link_node
{
int i;
struct link_node *next;
}node; //定义结点
void combine(node *head1, node *head2) //合并
{
node *p1, *p2, *pre1 = NULL, *pre2 = NULL;
if (!head1 && !head2)
{
puts("两个电话本都是空的,合不了");
}
else
{
p1 = head1;
p2 = head2;
while (p1)
{
while (p2)
{
while (p2->i != p1->i)
{
pre2 = p2;
p2 = p2->next;
}
if (p2->next)
{
if (!pre2)
{
p2 = p2->next;
head2 = head2->next;
}
else
{
pre2->next = p2->next;
}
}
else
{
p2 = head2;
}
}
p2 = head2;
pre1 = p1;
p1 = p1->next;
}
pre1->next = head2;
p1 = head1;
while (p1)
{
printf("%d",p1->i);
p1 = p1->next;
}
}
}
9 个解决方案
#1
头尾相连的话,有这么复杂吗?
p1 = head1
while(p1->next != NULL)p1 = p1->next;
p1->next = head2;
p1 = head1
while(p1->next != NULL)p1 = p1->next;
p1->next = head2;
#2
忘说了。。要删除重复项。。所以
#3
这样的话。。到了第二个链表结束时,还会执行p1->next = head2;的吧
#4
看的头痛,没敢继续,鄙人想法:
遍历linklistA,再遍历linklistB,删除重复节点,再连接这2个linklist
遍历linklistA,再遍历linklistB,删除重复节点,再连接这2个linklist
#5
查找每个listB中元素是否在listA中。。如果不存在则假如listA,存在就pass。。最后首尾相连就可以了
#6
最好合并前使需要连接的链表有序。
插入前先找到合适的插入位置,保证插入节点后链表依旧有序。
插入前先找到合适的插入位置,保证插入节点后链表依旧有序。
#7
谢谢各位。。我明白你们的意思。。我也是实现的
问题不是查找重复项,而是两个链表连不起来。。
大家可以直接跳过两个while。。看后面的
pre1->next = head2;
p1 = head1;
我用这两句连接,但不行,想知道问题出在哪里
问题不是查找重复项,而是两个链表连不起来。。
大家可以直接跳过两个while。。看后面的
pre1->next = head2;
p1 = head1;
我用这两句连接,但不行,想知道问题出在哪里
#8
自己顶
#9
搞不懂
#1
头尾相连的话,有这么复杂吗?
p1 = head1
while(p1->next != NULL)p1 = p1->next;
p1->next = head2;
p1 = head1
while(p1->next != NULL)p1 = p1->next;
p1->next = head2;
#2
忘说了。。要删除重复项。。所以
#3
这样的话。。到了第二个链表结束时,还会执行p1->next = head2;的吧
#4
看的头痛,没敢继续,鄙人想法:
遍历linklistA,再遍历linklistB,删除重复节点,再连接这2个linklist
遍历linklistA,再遍历linklistB,删除重复节点,再连接这2个linklist
#5
查找每个listB中元素是否在listA中。。如果不存在则假如listA,存在就pass。。最后首尾相连就可以了
#6
最好合并前使需要连接的链表有序。
插入前先找到合适的插入位置,保证插入节点后链表依旧有序。
插入前先找到合适的插入位置,保证插入节点后链表依旧有序。
#7
谢谢各位。。我明白你们的意思。。我也是实现的
问题不是查找重复项,而是两个链表连不起来。。
大家可以直接跳过两个while。。看后面的
pre1->next = head2;
p1 = head1;
我用这两句连接,但不行,想知道问题出在哪里
问题不是查找重复项,而是两个链表连不起来。。
大家可以直接跳过两个while。。看后面的
pre1->next = head2;
p1 = head1;
我用这两句连接,但不行,想知道问题出在哪里
#8
自己顶
#9
搞不懂