问题描述:
以x为基准,将源链表分成比x小的部分和比x大的部分,小的部分在前大的部分在后生成新链表。
代码段:
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkNode;
int n;
cout << "输入n个节点: ";
cin >> n;
//输入源链表
LinkNode *s, *r, *head;
head = (LinkNode*)malloc(sizeof(LinkNode));
r = head;
for (int i = 0; i < n; i++) {
s = (LinkNode*)malloc(sizeof(LinkNode));
cin >> s->data;
r->next = s;
r = s;
}
r->next = NULL;
int x;
cout << "输入基准x: ";
cin >> x;
LinkNode *s2, *r2, *head2;
head2 = (LinkNode*)malloc(sizeof(LinkNode));
r2 = head2;
r = head->next;
while (r != NULL) { //将源链表中比x小的元素插入新链表
if (r->data < x) {
s2 = (LinkNode*)malloc(sizeof(LinkNode));
s2->data = r->data;
r2->next = s2;
r2 = s2;
}
r = r->next;
}
r = head->next;
while (r != NULL) { //将源链表中比x大的元素插入新链表
if (r->data >= x) {
s2 = (LinkNode*)malloc(sizeof(LinkNode));
s2->data = r->data;
r2->next = s2;
r2 = s2;
}
r = r->next;
}
r2->next = NULL;
r2 = head2->next;
while (r2 != NULL) { //输出新链表
cout << r2->data;
r2 = r2->next;
}
r = head; //释放链表
s = r->next;
while (s != NULL) {
free(r);
r = s;
s = r->next;
}
free(s);
r2 = head2;
s2 = r2->next;
while (s2 != NULL) {
free(r2);
r2 = s2;
s2 = r2->next;
}
free(s2);
return 0;
}
运行结果: