Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/a9794202ddc66d25cc1d416e04adc7a9 to your computer and use it in GitHub Desktop.
Save jianminchen/a9794202ddc66d25cc1d416e04adc7a9 to your computer and use it in GitHub Desktop.
HackerRank - insert a node in double linked list
/*
Insert Node in a doubly sorted linked list
After each insertion, the list should be sorted
Node is defined as
struct Node
{
int data;
Node *next;
Node *prev;
}
*/
// test case:
// 1. list is empty
// 2. new node is before head,
// 3. after the last one,
// 4. or in the middle.
Node* SortedInsert(Node *head,int data)
{
// Complete this function
// Do not write the main method.
if(head==NULL)
{
Node* newHead = new Node();
newHead->data = data;
newHead->next = NULL;
newHead->prev = NULL;
return newHead;
}
Node* dummyHead = new Node();
Node* runner = head;
Node* prev = dummyHead;
prev->next = runner;
runner->prev = prev;
bool foundPos = false;
while(runner !=NULL)
{ // increasing linked list: 2, 4, 6, insert 1, or 3, 7
if(data < runner->data )
{
// insert a new node between prev and runner
Node* newNode = new Node();
newNode->data = data;
prev->next = newNode;
newNode->prev = prev;
newNode->next = runner;
runner->prev = newNode;
foundPos = true;
break;
}
prev = runner;
runner = runner->next;
}
if(!foundPos)
{
Node* newNode = new Node();
newNode->data = data;
prev->next = newNode;
newNode->prev = prev;
newNode->next = NULL;
}
return dummyHead->next;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment