有一个整数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* insert(vector<int> A, vector<int> nxt, int val) {
//1.若A为空,插入的值就为首节点
if (A.size() == 0)
{
ListNode *p = new ListNode(val);
p->next = NULL;
return p;
}
//2.如果A不为空,需要先构建普通链表(循环链表不能通过测试用例)
ListNode *head = new ListNode(A[0]);
ListNode *h1 = head;
for (int i = 1; i < A.size(); i++)
{
h1->next = new ListNode(A[i]);
h1 = h1->next;
}
h1->next=NULL;
/*3.构建好了普通链表后,进行插入操作*/
ListNode *pre = head;
ListNode *cur = pre->next;
//如果插入的值小于头结点的值,head需要指向新插入的节点
if(pre->val >= val){
ListNode *p=new ListNode(val);
p->next=head;
head=p;
return head;
}
//如果当前链表不只一个节点
while(cur != NULL )//先cur移动到第一个比val大的节点,次数再将val插入到pre与cur之间
{
if(pre->val<=val&&val<=cur->val){
ListNode *p=new ListNode(val);
pre->next=p;
p->next=cur;
break;
}
pre=pre->next;
cur=cur->next;
}
//如果当前链表只有一个节点
if (cur == NULL)
{ //此时pre->val<val,直接连接到尾部
ListNode *p = new ListNode(val);
pre->next=p;
p->next=NULL;
}
return head;
}
};