首页 > 试题广场 >

无环单链表插值

[编程题]无环单链表插值
  • 热度指数:1958 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

有一个有序数组A和一个整数val,请你用A构造一个结点值有序的无环单链表,并对其插入一个点值为val的点,并且保证这个无环单链表依然有序。

给定包含链表的所有元素的值(从头结点开始)的数组A,同时给定val,请构造出这个无环单链表,并返回插入该val值后的头结点。

数据范围:
0 < A.size() <= 1000
0 <= A中的元素值 <= 1000
0 < val <= 1000

例如当数组A为[1,3,4,5,7],val为2时,插入val值后的链表变为{1,2,3,4,5,7},如下图所示:

示例1

输入

[1,3,4,5,7],2

输出

{1,2,3,4,5,7}

说明:本题目包含复杂数据结构ListNode,点此查看相关信息
struct ListNode* insert(int* A, int ALen, int val ) 
{
    struct ListNode *dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode *p = dummy;
    struct ListNode *cur = dummy;

    int i = 0;

    while(i<ALen)
    {
        struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode));
        node->val = A[i];
        p->next = node;
        p = p->next;
        i++;
    }

    int n = 0;

    while(n<ALen)
    {
        if(cur->next->val>val)
        {
            struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode));
            node->val = val;
            node->next = cur->next;
            cur->next = node;
            return dummy->next;
        }
        cur = cur->next;
        n++;
    }

    struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode));
    node->val = val;
    node->next = NULL;
    cur->next = node;

    return dummy->next;
}

发表于 2023-04-12 23:40:35 回复(0)
/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param A int整型一维数组
 * @param ALen int A数组长度
 * @param val int整型
 * @return ListNode类
 */
struct ListNode* insert(int* A, int ALen, int val ) {
    // write code here
    struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* p1 = head;
    int i = 0;
    while (i < ALen) {
        struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
        node->val = A[i];
        p1->next = node;
        p1 = p1->next;
        i++;
    }
    //struct ListNode *p2=head;
    struct ListNode* p3 = head;
    while (p3->next) {
        if (val < p3->next->val) {
            struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
            node->val = val;
            node->next = p3->next;
            p3->next = node;
            return head->next;
        }
        p3=p3->next;

    }
    struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
    node->val = val;
    node->next = NULL;
    p3->next = node;
    return head->next;

}

发表于 2022-12-24 07:39:31 回复(0)