Insert SortList
来源:互联网 发布:黑暗之魂2原罪学者优化 编辑:程序博客网 时间:2024/06/05 11:14
public ListNode insertionSortList(ListNode head) { if(head==null||head.next==null) { return head; } ListNode dummy = new ListNode(-1); dummy.next = null; ListNode new_next; ListNode pre,next; while(head!=null) { next = head.next; pre = searchForInsertPos(dummy,head.val); new_next = pre.next; head.next = new_next; pre.next = head; //插入动作 head = next; } return dummy.next; } }
ListNode searchForInsertPos(ListNode head, int val) { ListNode pre = head; ListNode next = head.next; while(next!=null&&next.val<=val) { pre = next; next = next.next; } return pre; }
基本分析:用插入排序对一个链表进行排序。
一开始写的时候想套用数组的插入排序,结果发现无法对末节点加上NULL。
对链表进行插入排序的正确方法是:新建一个头节点,遍历原来的链表,对原链表的每个节点找到新链表中适合插入位置的前指针,然后执行插入操作。
这种操作链表的题有一个技巧就是新建一个dummy作为head,然后把数据插入到dummy的链表中,最后返回dummy.next。
第二种方法:
public ListNode insertionSortList(ListNode head) {if(head == null)return null;ListNode helper = new ListNode(0);ListNode pre = helper;ListNode cur = head;while(cur!=null){ListNode next = cur.next;pre = helper;//helper头节点并不参与比较while(pre.next!=null && pre.next.val<cur.val){pre = pre.next;}cur.next = pre.next;pre.next = cur;cur = next;}return helper.next;}
0 0
- Insert SortList
- SortList
- SortList
- SortList
- sortlist.c
- leetcode || sortlist
- leetcode--SortList
- leetcode---SortList
- leetcode题目解答---- SortList
- leetcode 148 sortList
- Leetcode 148 SortList
- 刷题——SortList
- leetcode 148 sortlist
- SortList 单链表排序 要求复杂度O(NlgN)
- LeetCode 148: SortList, 206:Reverse linked list
- INSERT
- insert
- insert
- Android原生与H5交互的实现
- 悟道
- 北漂的程序猿何去何从
- [题解]bzoj1066(SCOI2007)蜥蜴
- 十宗罪
- Insert SortList
- log4j配置文件,log4j.properties
- 数据库连接
- heredoc与nowdoc
- 滑雪(POJ-1088)
- 我的第一篇博客
- linux vim的配置
- UMR祝你元宵节快乐!(博弈论)
- Mysql PacketTooBigException Packet for query is too large