两个单链表头尾连接的问题

时间:2023-02-22 21:30:46
两个单链表电话本,结点为node,想头尾连接并打印,写了一个函数结果实现不了


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;

#2


忘说了。。要删除重复项。。所以

#3


引用 1 楼 best_02 的回复:
头尾相连的话,有这么复杂吗?
p1 = head1
while(p1->next != NULL)p1 = p1->next;
p1->next = head2;


这样的话。。到了第二个链表结束时,还会执行p1->next = head2;的吧

#4


看的头痛,没敢继续,鄙人想法:

遍历linklistA,再遍历linklistB,删除重复节点,再连接这2个linklist

#5


查找每个listB中元素是否在listA中。。如果不存在则假如listA,存在就pass。。最后首尾相连就可以了

#6


最好合并前使需要连接的链表有序。
插入前先找到合适的插入位置,保证插入节点后链表依旧有序。

#7


谢谢各位。。我明白你们的意思。。我也是实现的
问题不是查找重复项,而是两个链表连不起来。。
大家可以直接跳过两个while。。看后面的  
pre1->next = head2;
p1 = head1;
我用这两句连接,但不行,想知道问题出在哪里

#8


自己顶

#9


搞不懂

#1


头尾相连的话,有这么复杂吗?
p1 = head1
while(p1->next != NULL)p1 = p1->next;
p1->next = head2;

#2


忘说了。。要删除重复项。。所以

#3


引用 1 楼 best_02 的回复:
头尾相连的话,有这么复杂吗?
p1 = head1
while(p1->next != NULL)p1 = p1->next;
p1->next = head2;


这样的话。。到了第二个链表结束时,还会执行p1->next = head2;的吧

#4


看的头痛,没敢继续,鄙人想法:

遍历linklistA,再遍历linklistB,删除重复节点,再连接这2个linklist

#5


查找每个listB中元素是否在listA中。。如果不存在则假如listA,存在就pass。。最后首尾相连就可以了

#6


最好合并前使需要连接的链表有序。
插入前先找到合适的插入位置,保证插入节点后链表依旧有序。

#7


谢谢各位。。我明白你们的意思。。我也是实现的
问题不是查找重复项,而是两个链表连不起来。。
大家可以直接跳过两个while。。看后面的  
pre1->next = head2;
p1 = head1;
我用这两句连接,但不行,想知道问题出在哪里

#8


自己顶

#9


搞不懂