求两个有序链表的交集和差集
2017-06-15 10:04
441 查看
typedef struct ListNode { DataType data; ListNode* next; }ListNode;
//交集(注意:list1和list2如果各有2个4,交集也会出现两次) ListNode* Intersection(ListNode* plist1, ListNode* plist2) { //判断不为空 if(plist1 == NULL || plist2 == NULL) { return NULL; } //头结点(哨兵位节点) ListNode* newlist = BuyNode(0); ListNode* tail = newlist; //相等了一起走,值给tail,不相等小的走 while(plist1 && plist2) { if(plist1->data == plist2->data) { tail->next = plist1; tail = plist1; plist1 = plist1->next; plist2 = plist2->next; } else if(plist1->data < plist2->data) { plist1 = plist1->next; } else { plist2 = plist2->next; } } tail->next = NULL; //注意tail->next要置空 return newlist->next; }
//差集 ListNode* DifSet(ListNode* plist1, ListNode* plist2) { //判断不为空 if(plist1 == NULL || plist2 == NULL) { return NULL; } //头结点(哨兵位节点) ListNode* newlist = BuyNode(0); ListNode* tail = newlist; while(plist1 && plist2) { //相等一起走 if(plist1->data == plist2->data) { plist1 = plist1->next; plist2 = plist2->next; }
else if(plist1->data < plist2->data) { tail->next = plist1; tail = plist1; plist1 = plist1->next; } else { tail->next = plist2; tail = plist2; plist2 = plist2->next; } } if(plist1) { tail->next = plist1; } else { tail->next = plist2; } return newlist->next; }
相关文章推荐
- 2-12. 两个有序链表序列的交集
- 两个有序链表序列的交集
- PAT DS 2-11 两个有序链表序列的交集
- 浙江大学PAT上机题解析之2-12. 两个有序链表序列的交集
- 两个有序链表的合并与交集
- Java 两个有序集合 求交集 差集
- 每天作死一道题——两个有序链表序列的交集
- 《数据结构学习与实验指导》2-12:两个有序链表序列的交集
- 2-12. 两个有序链表序列的交集(20)
- 7-16 两个有序链表序列的交集(20 分)
- 递增有序的顺序表表示集合,求解两个集合的交集 并集 差集(c语言实现)
- PAT2-12. 两个有序链表序列的交集
- 【C】两个有序链表序列的交集
- 2-12. 两个有序链表序列的交集
- pat 2-12. 两个有序链表序列的交集
- PTA 5-52 两个有序链表序列的交集 (20分) (单链表)
- 7-2 两个有序链表序列的交集
- PTA数据结构之两个有序链表序列的交集
- 实验项目 2-12:两个有序链表序列的交集
- 两个有序链表(相邻元素可能相同)找出他们交集,并把结果放到另一链表中