链表划分
2014-10-10 11:28
501 查看
题目:以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
思路:创建两个链表分别存放小于x、大于x的结点,再合并两个链表
c语言具体实现:
思路:创建两个链表分别存放小于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; }
相关文章推荐
- [LeetCode]86 链表划分
- 链表划分
- 链表划分
- Java——将单向链表按某值划分成左边小、中间相等、右边大的形式(基础问题)
- Java——将单向链表按某值划分成左边小、中间相等、右边大的形式(进阶问题)
- 算法学习-链表划分
- 链表划分
- LeetCode2.2.3 @ Partition List 链表划分 D3F3
- LintCode 96. 链表划分
- 值x将链表划分为两部分,小于x的结点排在大于或等于x 的结点之前
- 链表划分
- 链表划分 - C++
- 链表划分
- 将单向链表按某值划分成左边小、 中间相等、 右边大的形式~迎娶是挺
- LintCode-链表划分
- Partition List 链表划分区间@LeetCode
- [Leetcode] Partition list 划分链表
- 【基础练习】链表排序,反转,划分,拷贝等
- 作业8.96:链表划分
- 链表划分