用于按升序将整数插入循环链接_list的函数

时间:2016-09-08 05:01:05

标签: data-structures

我正在编写一个函数,用于按顺序将一个整数插入循环链接的_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;
 }

}

2 个答案:

答案 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;