zoukankan      html  css  js  c++  java
  • 面试题--链表实现插入排序

    题目链接

    代码:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* insertionSortList(ListNode* head) {
            if(!head||!head->next){
                return head;
            }
            ListNode* hhead=new ListNode(1);     //设立头结点指向第一个节点,方便后续遍历查找
            hhead->next=head;
            ListNode* cur=head->next,*end=head;  //cur表示当前准备排序的节点,end表示已排序完成的最后一个元素
            while(cur){
                if(cur->val<end->val){      //若是小于已排序序列的最后一个元素,则需要进行插入排序
                    ListNode* tmp=hhead;
                    while(cur->val > tmp->next->val){  //找到需要插入位置的前一个结点(需要插入的结点跟在此节点后)
                        tmp=tmp->next;
                    }
                    end->next=cur->next; //剔除当前排序节点
                    cur->next=tmp->next;  //两步插入操作
                    tmp->next=cur;   
                    cur=end->next;  //进行下一个节点的排序
                }
                else{                      //若是小于,则直接加入已排序序列,进行下一个节点的排序
                    end=end->next;
                    cur=cur->next;
                }
            }
            return hhead->next;
        }
    };
    

    虽说不难,但是面试被问到脑子一乱想不出来还是会挺伤的,所以捋一捋思路

  • 相关阅读:
    win_tc使用感受
    10进制转8进制(栈操作)
    动态栈
    数组
    单链表学习
    static用法
    基础2
    linux c first
    linux net command /uboot command
    opencv
  • 原文地址:https://www.cnblogs.com/Kaniso-Vok/p/13767246.html
Copyright © 2011-2022 走看看