还是和removeDuplicateinSortedArr类似的思路 循环不变式
package oj.leetcode; import data.ListNode; /* * 从loop invariant的角度去考虑这个问题。也就能在考虑问题的时候,完成了对算法在数学意义上的证明。 假设,你已经有了一个lessList,一个geList。 然后,就是不断扫描原来的list的各个node,把它们加入到上面两个list之后。 */ public class PatitionList { public ListNode partition(ListNode head, int x) { // Start typing your Java solution below // DO NOT write main() function ListNode lessHead = null; ListNode lessTail = null; ListNode geHead = null; ListNode geTail = null; ListNode p = head; while(p!=null){ if(p.val>=x){ if(geHead == null){ geHead = p; geTail = p; }else{ geTail.next = p; geTail = geTail.next; } }else{ if(lessHead == null){ lessHead = p; lessTail = p; }else{ lessTail.next = p; lessTail = lessTail.next; } } p = p.next; } if(geTail != null) geTail.next = null; if(lessTail!=null) {lessTail.next = geHead;return lessHead;} return geHead; } }
同学面试遇到的一个题目,类似思路~ 假设有两个链表 奇数位链表和 偶数位链表
package othersinteview; import data.ListNode; /* * 将链表1-2-3-4-5-…-(2n-2)-(2n-1)-(2n) * 链接成1-3-5-…(2n-1)-(2n)-(2n-2)-2,分奇偶 */ public class EvenOldList { public ListNode evenOldList(ListNode head){ ListNode evenHead = null; ListNode evenTail = null; ListNode oldHead = null; ListNode oldTail = null; boolean old = true; ListNode p = head; ListNode q = null; while(p!=null){ q = p.next; if(old){ if(oldHead == null){ oldHead = p; oldTail = p; }else{ oldTail.next = p; oldTail = oldTail.next; } old = false; }else{ if(evenHead == null){ evenHead = p; evenTail = p; }else{ p.next = evenHead;//!!!!会改变p.next的值,所以事先用q保存。 evenHead = p; } old = true; } p = q; } if(evenTail!=null) evenTail.next = null; if(oldTail!=null) oldTail.next = evenHead; return oldHead; } }
相关推荐
刷LeetCode刷LeetCode刷LeetCode刷LeetCode刷LeetCode
大佬的leetcode刷题笔记(c++版本)
LeetCode 101_C++_算法_leetcode_leetcode101_leetcode101_源码.zip
LeetCode 101_C++_算法_leetcode_leetcode101_leetcode101.zip
vs code LeetCode 插件
terminal-leetcode, 终端Leetcode是基于终端的Leetcode网站查看器 终端 leetcode终端leetcode是基于终端的leetcode网站查看器。本项目是由 RTV 激发的。 我最近正在学习本地化的反应,以实践我的新知识,并根据这个...
leetcode刷题, 直接用leetcode的分类方式.
leetcode中文版
该分类为结合《算法导论》的内容,给出Leetcode题目分类。题目主要集中在Leetcode的前400题中,也包括有后面的一些经典值得刷的题。该题目分类按照算法和数据结构排版,即可供单独Leetcode刷题使用,也可以配合学习...
100个leetCode详细解答
这份文档列出了leetcode几乎所有题目(大约134题)的分类以及难度指示,是刷leetcode的必备良品。现在leetcode总的题目数已经达到150题,所以有部分题目没有包含在这个文档中,但是——足够了。po主刷leetcode的时候...
LeetCode 选讲1
(C++)LeetCode刷题题解答案
LeetCode 刷题笔记
LeetCode 刷题汇总1
Leetcode题解.pdf 刷题合集 Leecode大部分题目及答案
leetcode高频面试笔试题150+道,亲身总结。
算法 Leetcode刷题手册 labuladong的算法小抄官方完整版
LeetCode面试笔试题
LeetCode-Swift, 快速LeetCode解决方案 LeetCodeLeetCode在线判断是一个包含很多收费算法的网站。 them Google Google Google Google LinkedIn this this repo 。 请免费参考并收费STAR以支持这个 repo,