我正在编写一个函数,用于按顺序将一个整数插入循环链接的_list中,其元素按升序排列(从最小到最大)。
函数insertSortedList的输入是指向循环列表中某个节点的指针,以及0到100之间的整数n。返回指向新插入节点的指针。
循环链表的节点要遵循的结构是 -
Struct CNode;
Typedef struct CNode cnode;
Struct CNode
{
Int value;
Cnode* next;
};
Cnode* insertSortedList (cnode* start,int n)
{
//WRITE YOUR CODE HERE
}
//FUNCTION SIGNATURE ENDS
Test Case 1:
Input:
[3->4->6->1->2->^],5
Expected Return Value:
[5->6->1->2->3->4->^]
Test Case 2:
Input:
[1->2->3->4->5->^],0
Expected Return Value:
[0->1->2->3->4->5->^]
这是我的代码:
Cnode* insertSortedList (cnode* start,int n)
{
int count=1,i,count1=0;
Cnode* temp=start;
Cnode* temp1=start;
Cnode* temp2=start;
Cnode* newHead=NULL;
while(temp!=NULL)
{
temp=temp->next;
count ++;
}
int arr[count];
while(temp2!=NULL)
{
for(j=0;j<count;j++)
{
arr[j]=temp->data;
temp2=temp2->next;
}
}
while(n>=temp2->value)
{
temp2=temp2->next;
}
newHead=temp2;
for(i=0;i<count;i++)
{
Cnode* newNode=new Cnode();
newNode->data=arr[i];
newNode->next=NULL;
}
}
答案 0 :(得分:0)
你说它是一个循环链接列表,但你正在检查temp != null
。它应该是temp→next != start
。
答案 1 :(得分:0)
它根本不那么复杂。给定指向循环链表中任何元素的指针,其元素已经按升序排列,我们只需要找到新元素的位置,这可以在几行中完成。简单的Java代码 -
CNode prev = start;
CNode next = start.next;
while(true){
if(prev.value <= n && n <= next.value) break;
prev=next; next=next.next;
}
CNode node = new CNode();
node.value = n;
prev.next=node; node.next=next;
return node;