链表划分
来源:互联网 发布:苟是什么意思网络 编辑:程序博客网 时间:2024/06/06 00:35
题目:以给定值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;}}elsebreak;}traverse(L);printf("请输入整数x\n");scanf("%d",&x);traverse(partationbyX(L,R,x));return 0;}
0 0
- 链表划分
- 链表划分
- 题目:链表划分
- LintCode-链表划分
- 链表划分
- 链表划分
- LintCode:链表划分
- 链表的划分
- 链表:链表划分
- 链表划分
- 链表划分
- Lintcode 链表划分
- 链表划分
- LintCode 链表划分
- 链表划分-LintCode
- 链表划分
- 链表划分
- 链表划分
- 智能提取2.1
- Android隐藏界面静音拍照
- Makefile学习(一)[第二版]
- 提高编程水平的十条PHP技巧
- QTableWidget的用法总结
- 链表划分
- C#写的媒体播放器
- 什么是java序列化,如何实现java序列化?
- 北大小师妹告诉你iPhone 6合约机哪家强?
- 黑马程序员——学习日记8——集合框架
- 智能提取关键
- Android中处理崩溃异常和记录日志
- 彻底解决Android SDK Manager更新慢的问题
- 第二章:线性表