数据结构 - 从一个链表中删除在另一个链表中的元素(C++)
2012-07-04 23:00
267 查看
/*
Sort both list from small to big. And then use the following code.
*/
#include <iostream>
using namespace std;
struct Node
{
char data;
Node* next;
};
Node* create()
{
Node* head = NULL;
Node* rear = head;
Node* p; // The pointer points to new created node.
char tmp;
do
{
cout << "Please input integer or char '#':";
cin >> tmp;
if(tmp != '#')
{
p = new Node;
p->data = tmp;
p->next = NULL;
if(head == NULL)
{
head = p;
}
else
{
rear->next = p;
}
rear = p;
}
}
while(tmp != '#');
return head;
}
void print(Node* head)
{
Node* p = head;
if(head != NULL)
{
do
{
cout << p->data << ' ';
p = p->next;
}
while(p != NULL);
}
cout << endl;
}
Node* del(Node* l1, Node* l2)
{
if(!l1 || !l2)
{
return NULL;
}
Node *p = new Node;
p->next = l1;
Node *pL1 = l1, *pL2 = l2, *head = p;
while(pL1 && pL2)
{
if(pL1->data < pL2->data)
{
pL1 = pL1->next;
p = p->next;
}
else if(pL1->data > pL2->data)
{
pL2 = pL2->next;
}
else
{
pL1 = pL1->next;
p->next = pL1;
}
}
l1 = head->next;
return l1;
}
int main()
{
cout << "Please input the first list:" << endl;
Node* l1 = create();
cout << endl << "Please input the second list:" << endl;
Node* l2 = create();
cout << endl << "--------------------------" << endl;
cout << "The first list is: ";
print(l1);
cout << "The second list is: ";
print(l2);
Node* l = del(l1, l2);
cout << endl << "The result list is: ";
print(l);
return 0;
}
// Output:
/*
Please input the first list:
Please input integer or char '#':1
Please input integer or char '#':1
Please input integer or char '#':1
Please input integer or char '#':1
Please input integer or char '#':3
Please input integer or char '#':3
Please input integer or char '#':3
Please input integer or char '#':3
Please input integer or char '#':4
Please input integer or char '#':5
Please input integer or char '#':6
Please input integer or char '#':6
Please input integer or char '#':6
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':8
Please input integer or char '#':8
Please input integer or char '#':8
Please input integer or char '#':9
Please input integer or char '#':9
Please input integer or char '#':9
Please input integer or char '#':9
Please input integer or char '#':#
Please input the second list:
Please input integer or char '#':1
Please input integer or char '#':2
Please input integer or char '#':5
Please input integer or char '#':5
Please input integer or char '#':5
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':9
Please input integer or char '#':#
--------------------------
The first list is: 1 1 1 1 3 3 3 3 4 5 6 6 6 7 7 8 8 8 9 9 9 9
The second list is: 1 2 5 5 5 7 7 7 7 7 9
The result list is: 3 3 3 3 4 6 6 6 8 8 8
*/
Sort both list from small to big. And then use the following code.
*/
#include <iostream>
using namespace std;
struct Node
{
char data;
Node* next;
};
Node* create()
{
Node* head = NULL;
Node* rear = head;
Node* p; // The pointer points to new created node.
char tmp;
do
{
cout << "Please input integer or char '#':";
cin >> tmp;
if(tmp != '#')
{
p = new Node;
p->data = tmp;
p->next = NULL;
if(head == NULL)
{
head = p;
}
else
{
rear->next = p;
}
rear = p;
}
}
while(tmp != '#');
return head;
}
void print(Node* head)
{
Node* p = head;
if(head != NULL)
{
do
{
cout << p->data << ' ';
p = p->next;
}
while(p != NULL);
}
cout << endl;
}
Node* del(Node* l1, Node* l2)
{
if(!l1 || !l2)
{
return NULL;
}
Node *p = new Node;
p->next = l1;
Node *pL1 = l1, *pL2 = l2, *head = p;
while(pL1 && pL2)
{
if(pL1->data < pL2->data)
{
pL1 = pL1->next;
p = p->next;
}
else if(pL1->data > pL2->data)
{
pL2 = pL2->next;
}
else
{
pL1 = pL1->next;
p->next = pL1;
}
}
l1 = head->next;
return l1;
}
int main()
{
cout << "Please input the first list:" << endl;
Node* l1 = create();
cout << endl << "Please input the second list:" << endl;
Node* l2 = create();
cout << endl << "--------------------------" << endl;
cout << "The first list is: ";
print(l1);
cout << "The second list is: ";
print(l2);
Node* l = del(l1, l2);
cout << endl << "The result list is: ";
print(l);
return 0;
}
// Output:
/*
Please input the first list:
Please input integer or char '#':1
Please input integer or char '#':1
Please input integer or char '#':1
Please input integer or char '#':1
Please input integer or char '#':3
Please input integer or char '#':3
Please input integer or char '#':3
Please input integer or char '#':3
Please input integer or char '#':4
Please input integer or char '#':5
Please input integer or char '#':6
Please input integer or char '#':6
Please input integer or char '#':6
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':8
Please input integer or char '#':8
Please input integer or char '#':8
Please input integer or char '#':9
Please input integer or char '#':9
Please input integer or char '#':9
Please input integer or char '#':9
Please input integer or char '#':#
Please input the second list:
Please input integer or char '#':1
Please input integer or char '#':2
Please input integer or char '#':5
Please input integer or char '#':5
Please input integer or char '#':5
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':7
Please input integer or char '#':9
Please input integer or char '#':#
--------------------------
The first list is: 1 1 1 1 3 3 3 3 4 5 6 6 6 7 7 8 8 8 9 9 9 9
The second list is: 1 2 5 5 5 7 7 7 7 7 9
The result list is: 3 3 3 3 4 6 6 6 8 8 8
*/
相关文章推荐
- 数据结构 — 4.删除单链表中所有值大于mink且小于maxk的元素
- 从一个数组中删除 与另一个数组中共同存在的元素
- 数据结构 - 如何删除单向链表的倒数第m个元素?
- 数据结构之链表七:单链表中重复元素的删除
- 数据结构----实现对2个链表La,Lb有序合并,对相同的元素进行删除,
- 《数据结构与算法——C语言描述》答案 3.16 删除链表中的重复元素
- 数据结构—链表元素的删除和插入
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
- 数据结构-链表实现删除全部特定元素x
- 从一个链表channelHead中删除和channelToDeleteHead中相同的元素
- 数据结构--删除单链表中重复元素
- 复习四:链表——数据结构的的前奏之链表元素的遍历、删除以及链表中元素的删除
- 左程云著算法与数据结构题目最优解笔记-删除无序链表中重复的元素
- 单链表中重复元素的删除
- 数据结构学习二 数据结构之链表代码版【创建,遍历,删除,插入】
- 从单链表中删除最大的元素,单链表元素排序
- [LintCode]删除链表中的元素
- 数据结构实验之链表七:单链表中重复元素的删除
- C++单链表中删除指定范围内的元素
- 数据结构实验之链表七:单链表中重复元素的删除