- number 24:两个递增有序的单链表,设计算法成一个非递减有序的链表。
取A链表的头结点作为合并后链表的头结点,p指向A链表的开始节点,q指向B
链表的开始结点,重复进行比较p、q的data值。
void fun(LNode *&A, LNode *&B){
LNode *p=A->next, *q=B->next;
A->next = NULL; B->next = NULL;
LNode *r = A;
while(p!=NULL && q!=NULL){
if(p->data<=q->data){
r->next = p;
r = r->next;
p = p->next;
}
else{
r->next = q;
r = r->next;
q = q->next;
}
}
if(p!=NULL) r->next = p;
if(q!=NULL) r->next = q;
}
- number25:两个递增有序的单链表,设计算法成一个非递增有序的链表。
思想与24相同,区别在于,25使用头插法将其插入,而24使用尾插法。
void fun(LNode *&A, LNode *&B){
LNode *p = A->next, *q = B->next,*ra = A;
A->next = NULL;
B->next = NULL;
while(p!=NULL || q!=NULL){
if(p!=NULL || p->data <= q->data){
ra = p;
p = p->next;
ra->next = A->next;
A->next = ra;
}
if(q!=NULL || p->data > q->data){
ra = q;
q = q->next;
ra->next = A->next;
A->next = ra;
}
}
}
- 源码
#include<bits/stdc++.h>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
void CreateList_R(LNode *&L, int n){
L = new LNode;
L->next = NULL;
LNode *r = L;
for(int i=0; i<n; i++){
LNode *q = new LNode;
q->next = NULL;
cin>>q->data;
r->next = q;
r = q;
}
}
void fun(LNode *&A, LNode *&B){
LNode *p=A->next, *q=B->next;
A->next = NULL; B->next = NULL;
LNode *r = A;
while(p!=NULL && q!=NULL){
if(p->data<=q->data){
r->next = p;
r = r->next;
p = p->next;
}
else{
r->next = q;
r = r->next;
q = q->next;
}
}
if(p!=NULL) r->next = p;
if(q!=NULL) r->next = q;
}
void traverse(LNode *&L){
LNode *p = L->next;
while(p){
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
int main(void){
LNode *A, *B;
CreateList_R(A,3);
CreateList_R(B,3);
traverse(A);
traverse(B);
fun(A,B);
traverse(A);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
void CreateList_R(LNode *&L, int n){
L = new LNode;
L->next = NULL;
LNode *r = L;
for(int i=0; i<n; i++){
LNode *q = new LNode;
q->next = NULL;
cin>>q->data;
r->next = q;
r = q;
}
}
void fun(LNode *&A, LNode *&B){
LNode *p = A->next, *q = B->next,*ra = A;
A->next = NULL;
B->next = NULL;
while(p!=NULL || q!=NULL){
if(p!=NULL || p->data <= q->data){
ra = p;
p = p->next;
ra->next = A->next;
A->next = ra;
}
if(q!=NULL || p->data > q->data){
ra = q;
q = q->next;
ra->next = A->next;
A->next = ra;
}
}
}
void traverse(LNode *&L){
LNode *p = L->next;
while(p){
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
int main(void){
LNode *A, *B;
CreateList_R(A,3);
CreateList_R(B,3);
traverse(A);
traverse(B);
fun(A,B);
traverse(A);
return 0;
}