zoukankan      html  css  js  c++  java
  • 链表插入排序

    很简单,找到第一个逆序对,插入,注意头结点情况不同。然后如此反复即可。

    注意Java中对象按引用传递,引用本身是按值传递的。

    无附加头

    public ListNode insertionSortList(ListNode head) {
            if(head == null || head.next == null)
            {
                return head;
            }
            
            ListNode currNode = head;
            while(currNode.next != null)
            {
                if(currNode.val <= currNode.next.val)
                {
                    currNode = currNode.next;
                }else{
                    ListNode p = currNode.next;
                    currNode.next = currNode.next.next;
                    if(p.val < head.val)
                    {
                        p.next = head;
                        head = p;
                    }else{
                        ListNode tmp = head;
                        while(p.val >= tmp.next.val)
                        {
                            tmp = tmp.next;
                        }
                        p.next = tmp.next;
                        tmp.next = p;
                    }
                }
            }
            return head;
        }

    有附加头:

        public ListNode insertionSortList(ListNode head) {
             if(head == null || head.next == null)
             {
                 return head;
             }
             ListNode dummyNode = new ListNode(0);
             dummyNode.next = head;
             ListNode pNode = head;
             while (pNode.next != null) 
             {
                 if (pNode.val <= pNode.next.val) {
                    pNode = pNode.next;
                }else {
                    ListNode tmpNode = pNode.next;
                    pNode.next = pNode.next.next;
                    ListNode qNode = dummyNode;
                    while (tmpNode.val >= qNode.next.val ) {
                        qNode = qNode.next;
                    }
                    tmpNode.next = qNode.next;
                    qNode.next = tmpNode;
                }
             }
             return dummyNode.next;
            
        }

    可以看出有附加头的,把插入统一处理了,简化了操作。

  • 相关阅读:
    软件测试进程&测试类型
    课堂笔记:软件测试知识点汇总小结
    闰年测试程序
    关于 int.parse("abcd") 出错的问题分析及解决方案
    软件测试——字符串检测2.0
    边界值分析法实例分析
    测试管理
    软件评审
    单元测试与集成测试
    白盒测试
  • 原文地址:https://www.cnblogs.com/zqiguoshang/p/5897991.html
Copyright © 2011-2022 走看看