append

来源:互联网 发布:ipad画漫画软件 编辑:程序博客网 时间:2024/05/17 21:42
.请修改append函数,利用这个函数实现:
两个非降序链表的并集,1->2->3和2->3->5并为1->2->3->5

另外只能输出结果,不能修改两个链表的数据。

#include <iostream>using namespace std;typedef struct Node{struct Node* next;int data;}Node,*LNode;Node* append(LNode p,LNode q){if(NULL==p)return q;if(NULL==q)return p;Node *head = NULL;if(p->data>q->data){head = q;q = q ->next;}else{head = p;p = p->next;}Node* cani = NULL;Node* r1 = head;Node* r = NULL;while(NULL!=p&&NULL!=q){        if(p->data>q->data){r = q;q = q->next;}else{if(p->data==q->data){r = p;p = p->next;cani = q;q = q->next;}else{r = q;q = q->next;}}if(NULL!=cani){delete  cani;cani = NULL;}r1->next = r;r1 = r;}if(p!=NULL)r1->next = p;else{r1->next = q;}return head;}void print(LNode l){   while(l)   {   cout<<l->data<<"   " ;   l = l->next;   }   cout<<endl;}void create(LNode& l1,LNode& l2){int a1[]={1,2,3};int a2[]={2,3,4};Node* p,*q;l1 = new Node;l2 = new Node;l1->data = a1[0];l2->data = a2[0];p = l1;q = l2;for(int i = 1;i<3;i++){       Node* r1 = new Node;   Node* r2 = new Node;   r1->data = a1[i];   r2->data = a2[i];   p ->next = r1;   q->next = r2;   p = r1;   q = r2;}p->next = NULL;q->next = NULL;}int main(){LNode l1=NULL;LNode l2=NULL;    create(l1,l2);print(l1);print(l2);Node * head = append(l1,l2);print(head);return 0;}


原创粉丝点击