函数题:将单链表按基准划分
### 线性表实验六 将单链表按基准划分
### 目的: 掌握单链表的应用和算法设计。
### 内容: 编写一个程序,以给定值x为基准将单链表分割为两部分,所有小于x的结点排在大于或等于x的结点之前。你应当 保留 两个分区中每个节点的初始相对位置。
示例:

单链表为:{1, 4, 3, 2, 5, 2}, x = 3
以3为基准划分后,单链表为:{1, 2, 2, 4, 3, 5}。
### 单链表结点类型定义:
c++
typedef char ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next; //指向后继结点
} LinkNode; //单链表结点类型
### 函数接口定义:
下列各函数签名中,L为带头结点的单链表的头指针,如下图所示:

c++
/**
* 尾插法建立单链表:裁判实现
*/
void CreateListR(LinkNode *&L, ElemType a[], int n);
/**
* 输出线性表: 每个数据后面一个空格:裁判实现
*/
void DispList(LinkNode *L);
/**
* 将L中所有数据结点按x进行划分。
* 所有小于x的结点排在大于等于x的结点前面。
* 必须保证两个分区中每个节点的初始相对位置。
*/
void Split(LinkNode *&L, ElemType x);
### 裁判测试程序样例:
c++
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next; //指向后继结点
} LinkNode; //单链表结点类型
/**
* 尾插法建立单链表:裁判实现
*/
void CreateListR(LinkNode *&L, ElemType a[], int n);
/**
* 输出线性表: 每个数据后面一个空格:裁判实现
*/
void DispList(LinkNode *L);
/**
* 将L中所有数据结点按x进行划分。
* 所有小于x的结点排在大于等于x的结点前面。
* 必须保证两个分区中每个节点的初始相对位置。
*/
void Split(LinkNode *&L, ElemType x);
int main()
{
int n;
scanf("%d", &n);
ElemType a[n];
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
LinkNode *L;
CreateListR(L, a, n);
printf("L:"); DispList(L);
ElemType x;
scanf("%d", &x);
printf("以%d进行划分\n", x);
Split(L, x);
printf("L:"); DispList(L);
return 0;
}
/* 请在下面书写程序代码 */
### 输入样例:
第一行输入n, 其值不超过200。
第二行输入n个整数, 以空格分隔, 其值介于[-100,100]。
第三行输入x, 其值介于[-200,200]。
in
6
1 4 3 2 5 2
3
### 输出样例:
参见下面的样例。
整体输出线性表时,每个数据后面一个空格。
out
L:1 4 3 2 5 2
以3进行划分
L:1 2 2 4 3 5
答案:若无答案欢迎评论