leetcode_middle_87_274. H-Index

来源:互联网 发布:华硕访客网络限速 编辑:程序博客网 时间:2024/06/15 14:19

题意:

用插入排序来给一个单链表排序。


分析:

插入排序是遍历数组,然后,将这个数放在其左边(已经有序)的数组的有序位置。

但是链表不能倒序遍历,交换也很麻烦,我们用一个新数组来插入。

思路很简单,难的是实现。我一直认为链表只要细心的记录要改变的结点,把握好每一次断键,连键(比如插入等基本操作),以及判断空。这三件事情,就没什么问题了。

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode insertionSortList(ListNode head) {        if(head == null || head.next == null)            return head;        ListNode newHead = new ListNode(0);        ListNode newp = newHead;        ListNode oldp = head;        ListNode oldpNext = null;        while(oldp != null){        //遍历旧链表            oldpNext = oldp.next;            while(newp.next!=null && newp.next.val < oldp.val){                 //遍历新链表,寻找插入点                newp = newp.next;            }            //这时候,需要把oldp插入到newHead之后            oldp.next = newp.next;            newp.next = oldp;            //插入完成,旧数组指针往下走一位,新数组指针复原到链表头            oldp = oldpNext;            newp = newHead;        }        return newHead.next;    }}



0 0
原创粉丝点击