您的位置:首页 > 其它

链表划分

2014-10-10 11:28 501 查看
题目:以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前

思路:创建两个链表分别存放小于x、大于x的结点,再合并两个链表

c语言具体实现:

#include<stdio.h>
#include<stdlib.h>
#include"myList.h"

myList partationbyX(myList L,myList R,int x){
myList beforeStart,afterStart,p,next;
R = (myList)malloc(sizeof(myList));
p = L->next;
beforeStart = afterStart = NULL;
while(p != NULL){
next = p->next;//保存后继结点
if(p->data <x){
p->next = beforeStart;
beforeStart = p;
}
else{
p->next = afterStart;
afterStart = p;
}
p = next;
}
if(beforeStart == NULL){
R->next = afterStart;
}
else{
p = beforeStart;//保存头结点
while(p->next!= NULL)//寻找尾结点
p = p->next;
p->next = afterStart;
R->next = beforeStart;
}
return R;
}
void traverse(myList L){
myList p = L->next;
while(p != NULL){
printf("%d->",p->data);
p = p->next;
}
printf("NULL\n");
}
void createList(myList &L){
L = (myList)malloc(sizeof(myList));
L->next = NULL;
}
int main(){
myList L,p,q,R;
createList(L);
q = L;
elemType a;
int x;
while(1){
scanf("%d",&a);
if(a != 100){
p = (myList)malloc(sizeof(myList));
if(p == NULL)
return 0;
else{
p->data = a;
p->next = q->next;
q->next = p;
q = p;
}
}
else
break;
}
traverse(L);
printf("请输入整数x\n");
scanf("%d",&x);
traverse(partationbyX(L,R,x));
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: