首页 > 学院 > 开发设计 > 正文

环形链表插值练习

2019-11-08 01:10:47
字体:
来源:转载
供稿:网友

有一个整数val,如何在节点值有序的环形链表中插入一个节点值为val的节点,并且保证这个环形单链表依然有序。 给定链表的信息,及元素的值A及对应的nxt指向的元素编号同时给定val,请构造出这个环形链表,并插入该值。 测试样例: [1,3,4,5,7],[1,2,3,4,0],2 返回:{1,2,3,4,5,7}

这道题bug太多,首先构造的时候并不是环形列表而是单链表,链表的头部并未指向值最小的节点(是在题目样例中默认的)。在做题的过程中对于链表问题可以构造多一个节点,让这个节点指向头结点,这样可以规避很多边界可能出现的问题。正常对于环形列表,头指针必须指向链表中的最小值。如果插入的值比链表中所有的值都大,那么插入链表尾并返回头,如果比所有值都小则插入链表头返回插入的指针(加节点指向头可以规避这个问题)。

/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class InsertValue {public: ListNode* insert(vector<int> A, vector<int> nxt, int val) { if(A.empty()) return new ListNode(val); ListNode* PRehead=new ListNode(0); ListNode* res=prehead; int min=A[0]; int length=nxt.size(); int i=0; while(length--) { prehead->next=new ListNode(A[i]); prehead=prehead->next; i=nxt[i]; } ListNode *before=res; ListNode *after=res->next; while(after) { if(val<after->val) { ListNode* nodetemp=new ListNode(val); before->next=nodetemp; nodetemp->next=after; return res->next; } else { before=after; after=after->next; } } ListNode* nodetemp=new ListNode(val); before->next=nodetemp; return res->next; }};
上一篇:jdk1.7怎么下载

下一篇:垃圾回收

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表