美文网首页
5_2环形链表插值

5_2环形链表插值

作者: X_Y | 来源:发表于2017-09-13 01:09 被阅读11次

这题的后台判题是错误的,需要将环形列表的最后节点的next指向NULL

有一个整数val,如何在节点值有序的环形链表中插入一个节点值为val的节点,并且保证这个环形单链表依然有序。

给定链表的信息,及元素的值A及对应的nxt指向的元素编号同时给定val,请构造出这个环形链表,并插入该值。

测试样例:
输入:[1,3,4,5,7],[1,2,3,4,0],2
返回:{1,2,3,4,5,7}

/*
   struct ListNode {
   int val;
   struct ListNode *next;
   ListNode(int x) : val(x), next(NULL) {}
   };*/
class InsertValue {
    public:
        // 构造环形链表
        ListNode* make_list(const vector<int> A, const vector<int> nxt)
        {
            struct ListNode *p_start = new ListNode(A[0]);
            struct ListNode *end = p_start;
            struct ListNode *head = p_start;
            int idx = nxt[0];
            while(idx != 0){
                struct ListNode *p_node = new ListNode(A[idx]);
                end->next = p_node;
                end = p_node;
                idx = nxt[idx];
                if(head->val > p_node->val){
                    head = p_node;
                }
            }
            end->next = NULL;  //end->next = NULL; //应该是后面这样
            return head;
        }



        ListNode* insert(vector<int> A, vector<int> nxt, int val) {
            // write code here

            if(A.size()<1){
                return NULL;
            }
            struct ListNode *new_node = new ListNode(val);
            ListNode *head = make_list(A, nxt);
            ListNode *p_curr = head, *p_pre = NULL;

            do{
                if(val < p_curr->val){
                    if(p_pre != NULL){
                        p_pre->next = new_node;
                        new_node->next = p_curr;
                        return head;
                    }else{
                        new_node->next = p_curr;
                        head = new_node;
                        return head;
                    }
                }
                p_pre = p_curr;
                p_curr = p_curr->next;
            }while(p_curr != NULL);
            p_pre->next = new_node;
            new_node->next = NULL;  //new_node->next = head; // 应该是后面这样
            return head;
        }
};

相关文章

  • 5_2环形链表插值

    这题的后台判题是错误的,需要将环形列表的最后节点的next指向NULL 有一个整数val,如何在节点值有序的环形链...

  • 实现单向-双向环形链表

    单向环形链表 双向环形链表

  • c语言链表操作

    链表的创建 链表原地翻转 链表结点删除 头插法添加结点 修改链表某个结点的值 相当于查找元素,修改其关联元素的值 ...

  • swift 单链表操作 双链表操作

    单链表 尾插法 头插法 输入值删除节点 单链表反转 输入指点数 比此小的在左边 大的在右边 双链表 (不循环) 尾...

  • 双指针

    一、双指针总结 1.1题目 快慢指针(主要解决链表中的问题) 141.环形链表 142.环形链表 II 876.链...

  • 02-14:leetcode重刷8之哈希与数组

    链表: 判断链表是否环形、是否回文 1、是否链表 #Definitionforsingly-linkedlist....

  • Tourist with Data Structure Seco

    链表 读题要仔细,只看题干,容易死的很惨。 设计链表 环形链表 一般环形链表使用快慢指针方式去做,快慢指针算法。参...

  • 算法(Algorithms)第4版 练习 1.3.29

    题目 使用环形链表实现队列(FIFO),环形链表也是链表,只是没有任何一个节点的链接是空的,且只有链表非空则 la...

  • 判断一个链表是否为环形链表

    判断一个链表是否为环形链表 思路:通过检测一个节点此前是否已经被访问过来判断链表是否为环形链表。 算法: 我们遍历...

  • 单项环形链表介绍和约瑟夫问题

    单项环形链表介绍和约瑟夫问题 1.单项环形链表图解 2.Josephu(约瑟夫)问题 Josephu 问题为:设...

网友评论

      本文标题:5_2环形链表插值

      本文链接:https://www.haomeiwen.com/subject/udzhsxtx.html