版权声明:如需转载,请注明出处 https://blog.csdn.net/baidu_41813368/article/details/83794399
整体思路
1.分别创建两个结点变量cur1,cur2
2.cur1->data和cur2->data比较
3.如果cur1->data大于cur2->data
cur2 = cur2->next
4.如果cur1->data小于cur2->data
cur1 = cur1->next
5.如果cur1->data= cur2->data
cur1和cue2 同时向后走
代码
//求两个已排序单链表中相同的数据。void UnionSet(Node* l1,Node* l2);
void PrintIntersection(SListNode *List1, SListNode *List2)
{
SListNode *cur1 = List1;
SListNode *cur2 = List2;
while (cur1 != NULL && cur2 != NULL)
{
if (cur1->data < cur2->data)
{
cur1 = cur1->Next;
}
else if (cur1->data > cur2->data)
{
cur2 = cur2->Next;
}
else
{
printf(" %d ", cur1->data);
cur1 = cur1->Next;
cur2 = cur2->Next;
}
}
}
测试
void TestPrintIntersection()
{
SListNode*List1 = NULL, *List2 = NULL;
SListPushBack(&List1, 1);
SListPushBack(&List1, 3);
SListPushBack(&List1, 4);
SListPushBack(&List1, 6);
SListPushBack(&List2, 1);
SListPushBack(&List2, 5);
SListPushBack(&List2, 6);
PrintIntersection(List1,List2);
}
结果
进阶
如果相等的数字重复出现,这个数字只出现一次
void TestPrintIntersection()
{
SListNode*List1 = NULL, *List2 = NULL;
SListPushBack(&List1, 1);
SListPushBack(&List1, 3);
SListPushBack(&List1, 3);
SListPushBack(&List1, 4);
SListPushBack(&List1, 6);
SListPushBack(&List2, 1);
SListPushBack(&List2, 1);
SListPushBack(&List1, 3);
SListPushBack(&List2, 5);
SListPushBack(&List2, 6);
PrintIntersection(List1,List2);
}
//求两个已排序单链表中相同的数据。void UnionSet(Node* l1,Node* l2);
void PrintIntersection(SListNode *List1, SListNode *List2)
{
SListNode *cur1 = List1;
SListNode *cur2 = List2;
DataType data;
while (cur1 != NULL && cur2 != NULL)
{
if (cur1->data < cur2->data)
{
cur1 = cur1->Next;
}
else if (cur1->data > cur2->data)
{
cur2 = cur2->Next;
}
else
{
printf(" %d ", cur1->data);
data = cur1->data;
while (cur1 != NULL && cur1->data == data)
{
cur1 = cur1->Next;
}
while (cur2 != NULL && cur2->data == data)
{
cur2 = cur2->Next;
}
}
}
}