合并有序链表

来源:互联网 发布:linux中rpm命令 编辑:程序博客网 时间:2024/05/16 11:39

1问题描述:根据两个有序单链表生成一个新的有序单链表,原有单链表保持不变。要求新生成的链表中不允许有重复元素。
2算法思路:

        一,用指针p指向单链表A的第一个结点(这里的第一个结点不包括头结点),用指针q指向单链表B的第一个结点(这里的第一个结点不包括头结点),
        二,在指针p,q皆不为空的条件下循环,在此循环下可能为出现以下三种红情况。1:p指向的结点和q指向的结点中的数据相等,构建一个新的结点,将p(q)指向的结点中的数据赋值给新的结点,然后将指针p,q向后移一位;2:p指向的结点中的数据大于q指向的结点中的数据,构建一个新的结点,将q指向的结点中的数据赋值给新的结点,然后将指针q向后移一位;3:p指向的结点中的数据小于q指向的结点中的数据,构建一个新的结点,将p指向的结点中的数据赋值给新的结点,然后将指针p向后移一位;
        三,第二步之后,只可能出现一条链表中的数据没有完全并入到新的有序链表中,所以分别检测指针p,q,如果不为空,则将其并入到新的有序链表中;

3代码示例:

#include<iostream>using namespace std;struct Node{int data;Node* next;};void CreateList(Node* &L);void ShowList(Node* L);void MergeList(Node* &AB, Node* A, Node* B);int main(){Node* AB = NULL;Node* A = NULL;Node* B = NULL;CreateList(A);CreateList(B);ShowList(A);ShowList(B);MergeList(AB, A, B);ShowList(AB);return 0;}void CreateList(Node* &L){Node* pTemp = NULL;Node* pTrail = NULL;L = new Node;L->data = 0;pTrail = L;int n = 0;cout << "List the count of the number: " ;cin >> n;int* Data = new int[n];cout << "Please input the " << n << " number: " << endl;for(int i=0; i<n; i++)cin >> Data[i];for(int j=0; j<n; j++){pTemp = new Node;pTemp->data = Data[j];pTemp->next = NULL;pTrail->next = pTemp;pTrail = pTrail->next;}pTrail = NULL;}void ShowList(Node* L){Node* p = L->next;while( p != NULL ){cout << p->data << "  ";p = p->next;}cout << endl;}void MergeList(Node* &AB, Node* A, Node* B){AB = new Node;AB->data = 0;AB->next = NULL;Node* p = A->next;Node* q = B->next;Node* trail = AB;while( p != NULL && q != NULL){Node* temp = new Node;temp->next = NULL;if(p->data == q->data){temp->data = p->data;trail->next = temp;trail = trail->next;p = p->next;q = q->next;}else if( p->data < q->data){temp->data = p->data;trail->next = temp;trail = trail->next;p = p->next;}else{temp->data = q->data;trail->next = temp;trail = trail->next;q = q->next;}}while( p != NULL){Node* temp = new Node;temp->next = NULL;temp->data = p->data;trail->next = temp;trail = trail->next;p = p->next;}while( q != NULL){Node* temp = new Node;temp->next = NULL;temp->data = q->data;trail->next = temp;trail = trail->next;q = q->next;}trail = NULL;}


 

 

0 0
原创粉丝点击