目录
题目
思路
代码
数据结构
STL
题目
题目描述
建立长度为n的单链表A和长度为m的单链表B。编程实现将B表链接在A表的尾端,形成一个单链表A。数据类型指定为字符型。
输入
第一行为A表的长度n; 第二行为A表中的数据元素; 第三行为B表的长度m; 第四行为B表中的数据元素。
输出
输出为链接好后的A表中的所有数据元素。
样例输入
4 A B C D 6 1 2 3 4 5 6样例输出
A B C D 1 2 3 4 5 6
思路
和之前的方法一样,先遍历让位置p 指向链表LA的最后一个节点,然后再之间把链表LB接在后面即可
// 单链表合并
void LinklistMerge(Linklist* &LA,Linklist* &LB) {Linklist *p=LA;//循环找到LA的最后一个节点的位置pwhile(p->next!=NULL) {p=p->next;}p->next=LB->next;//直接将LB接在LA后面即可
}
代码
链表模板
数据结构
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
//定义链表
typedef struct LNode {char data;LNode* next;
}Linklist;
// 初始化链表
void LinklistInit(Linklist* &L) {L=(Linklist*)malloc(sizeof(Linklist));L->next=NULL;
}
//输入数据,创建链表
void LinklistCreate(Linklist* &L) {int n;cin>>n;Linklist *p=L;while(n--) {Linklist* q;LinklistInit(q);cin>>q->data;p->next=q;p=q;}
}
// 单链表合并
void LinklistMerge(Linklist* &LA,Linklist* &LB) {Linklist *p=LA;while(p->next!=NULL) {p=p->next;}p->next=LB->next;
}//输出数据,打印链表
void LinklistPrint(Linklist* &L) {L=L->next;while(L!=NULL) {cout<<L->data<<" ";L=L->next;}
}
int main() {Linklist *LA,*LB;LinklistInit(LA);LinklistCreate(LA);LinklistInit(LB);LinklistCreate(LB);LinklistMerge(LA,LB);LinklistPrint(LA);return 0;
}
STL
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
list<char>a,b;
int main(){int n;cin>>n;char x;while(cin>>x,a.push_back(x),--n);cin>>n;while(cin>>x,b.push_back(x),--n);b.splice(b.begin(),a);list<char>::iterator it;for(it=b.begin();it!=b.end();it++) {cout<<*it<<" ";}return 0;
}