首页 > 编程语言 >四种语言刷算法之对链表进行插入排序

四种语言刷算法之对链表进行插入排序

时间:2023-04-20 14:55:08浏览次数:49  
标签:head ListNode temp val 插入排序 newHead 链表 算法 next

力扣147. 对链表进行插入排序

1、C

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* insertionSortList(struct ListNode* head){
    struct ListNode* newHead = head;
    struct ListNode* p = newHead;
    struct ListNode* q = head->next;
    
    newHead->next = NULL;
    while(q!=NULL){
        struct ListNode* r = NULL;
        struct ListNode* temp = q;
        q = q->next;
        while(p!=NULL&&p->val<temp->val){
            r = p;
            p = p->next;
        }
        if(r==NULL){
            temp->next = newHead;
            newHead = temp;
        }
        else{
            r->next = temp;
            temp->next = p;
        }
        p = newHead;
    }
    return newHead;
}

2、C++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* insertionSortList(ListNode* head) {
        ListNode* newHead = head;
        ListNode* q = head->next;
        newHead->next = nullptr;
        while(q!=nullptr){
            ListNode* p = newHead;
            ListNode* temp = q;
            ListNode* r = newHead;
            q = q->next;
            while(p!=nullptr&&temp->val>p->val){
                r = p;
                p = p->next;
            }
            if(r==p){
                temp->next = newHead;
                newHead = temp;
            }
            else{
                r->next = temp;
                temp->next = p;
            }
        }
        return newHead;
    }
};

3、JAVA

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode insertionSortList(ListNode head) {
        ListNode newHead = head;
        ListNode q = head.next;
        newHead.next = null;
        while(q!=null){
            ListNode p = newHead;
            ListNode r = newHead;
            ListNode temp = q;
            q = q.next;
            while(p!=null&&p.val<temp.val){
                r = p;
                p = p.next;
            }
            if(r==p){
                temp.next = newHead;
                newHead = temp;
            }
            else{
                r.next = temp;
                temp.next = p;
            }
        }
        return newHead;
    }
}

4、Python

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def insertionSortList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        newHead = head
        q = head.next
        newHead.next = None
        while(q is not None):
            p = newHead
            r = newHead
            temp = q
            q = q.next
            while(p is not None and p.val<temp.val):
                r = p
                p = p.next
            if(r==p):
                temp.next = newHead
                newHead = temp
            else:
                r.next = temp
                temp.next = p
        return newHead

标签:head,ListNode,temp,val,插入排序,newHead,链表,算法,next
From: https://www.cnblogs.com/cmkbk/p/17325026.html

相关文章

  • 十大排序算法
    一、冒泡排序publicclassBubbleSortimplementsIArraySort{@Overridepublicint[]sort(int[]sourceArray)throwsException{//对arr进行拷贝,不改变参数内容int[]arr=Arrays.copyOf(sourceArray,sourceArray.length);......
  • LeetCode Top100:回文链表 (python)
    LeetCodeTop100:回文链表给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出:false提示:链表中节点数目在范围[1,105] 内0<=Node.val<=9 ......
  • LeetCode Top100: 相交链表(Python)
    LeetCodeTop100:相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原......
  • LeetCode Top100: 环形链表(python)
     给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos 不作为参数进行传递 。仅仅是为......
  • 贪心算法基础及leetcode例题
    理论本质:找到每个阶段的局部最优,然后去推导得到全局最优两个极端:常识&&很难:很多同学通过了贪心的题目,但都不知道自己用了贪心算法,因为贪心有时候就是常识性的推导,所以会认为本应该就这么做!套路:贪心没有套路,说白了就是常识性推导加上举反例做题的时候,只要想清楚局部最优......
  • 【ACM算法竞赛日常训练】DAY16【奇♂妙拆分】【区区区间间间】【小AA的数列】数学 |
    DAY16共3题:奇♂妙拆分(简单数学)区区区间间间(单调栈)小AA的数列(位运算dp)......
  • AES算法 前端JavaScript加密 后端Java解密
    CryptoJShttps://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js中文文档https://cryptojs.gitbook.io/docs/varAES=function(){ constuuid32="00010203-04050607-08090A0B-0C0D0E0F".toString();constparam=Array.from(uuid32......
  • [Leetcode]合并两个有序链表
    力扣链接依次比较,取小的尾插:初步代码:/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*mergeTwoLists(structListNode*list1,structListNode*list2){structListNode*......
  • JZ18 删除链表的节点
    importjava.util.*;/**publicclassListNode{*intval;*ListNodenext=null;*publicListNode(intval){*this.val=val;*}*}*/publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
    目录一、基础知识-二分法解题思路-数组中删除的思路二、题目一:704.二分查找三、题目二:27.移除元素一、基础知识1.二分法解题思路要求数组必须是有序排列,仅需要根据题目的条件去确定搜索区间。第一个关键点:区间的取值。一般有左闭右闭,左闭右开,左开右闭三种,这个的选择......