当前位置: 代码迷 >> 综合 >> SWUST OJ#954 单链表的链接
  详细解决方案

SWUST OJ#954 单链表的链接

热度:55   发布时间:2023-12-05 17:41:44.0

目录

题目

思路

代码

数据结构

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;
}