LintCode-链表划分
2015-11-06 15:54
363 查看
容易 链表划分 查看运行结果
29% 通过
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
您在真实的面试中是否遇到过这个题? Yes
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
这里对题目理解有点问题:
29% 通过
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
您在真实的面试中是否遇到过这个题? Yes
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
这里对题目理解有点问题:
案例一: 输入 1->4->3->2->5->2->null, 3 输出 1->4->2->2->3->5->null 期望答案 1->2->2->4->3->5->null 案列二 输入 1->2->0->3->1->2->1->0->2->2->2->1->0->2->null, 2 输出 0->0->0->1->1->1->1->2->3->2->2->2->2->2->null 期望答案 1->0->1->1->0->1->0->2->3->2->2->2->2->2->null ////不理解他划分好到底需不需要排序,能正确理解的朋友请留言指教。 /** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param head: The first node of linked list. * @param x: an integer * @return: a ListNode */ public ListNode partition(ListNode head, int x) { if(head == null){ return null; } ArrayList<Integer> a = new ArrayList<Integer>(); ArrayList<Integer> b = new ArrayList<Integer>(); boolean find =false; while(head != null){ if(head.val == x && !find){ find =true; head = head.next; continue; }else{ if(find){ if(head.val < x){ a.add(head.val); }else{ b.add(head.val); } }else{ a.add(head.val); } head = head.next; } } ListNode re = new ListNode(0); ListNode ree = re; for(int n : a){ re.next = new ListNode(n); re = re.next; } //// insertionSortList(ree); if(find){ re.next = new ListNode(x); re = re.next; } for(int n : b){ re.next = new ListNode(n); re = re.next; } return ree.next; } public static ListNode insertionSortList(ListNode head) { boolean flag = true; ListNode frist = head; ListNode second = head; if(head == null || head.next == null){ return head; }else{ frist = head.next; } while(flag){ flag = false; do{ if(frist.val<second.val){ int x =frist.val; frist.val = second.val; second.val = x; flag = true; } frist = frist.next; second = second.next; }while(frist != null); frist = head.next; second = head; } return head; } }
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- C语言双向链表的表示与实现实例详解
- C语言实现输出链表中倒数第k个节点
- C++语言实现线性表之链表实例
- STL list链表的用法详细解析
- C语言创建链表错误之通过指针参数申请动态内存实例分析
- php链表用法实例分析
- JavaScript中数据结构与算法(三):链表