1. Reverse a singly linked list
// // iterative version // Node* ReverseList( Node ** List ) { Node *temp1 = *List; Node * temp2 = NULL; Node * temp3 = NULL; while ( temp1 ) { //set the head to last node *List = temp1; // save the next ptr in temp2 temp2= temp1->pNext; // change next to privous temp1->pNext = temp3; temp3 = temp1; temp1 = temp2; } return *List; }
2. Delete a node in double linked list
void deleteNode(node *n) { node *np = n->prev; node *nn = n->next; np->next = n->next; nn->prev = n->prev; delete n; }
3. Sort a linked list
//sorting in descending order struct node { int value; node* NEXT; } //Assume HEAD pointer denotes the first //element in the linked list //only change the values? don't have to //change the pointers Sort( Node *Head) { node* first,second,temp; first= Head; while(first!=null) { second=first->NEXT; while(second!=null) { if(first->value value) { temp = new node(); temp->value=first->value; first->value=second->value; second->value=temp->value; delete temp; } second=second->NEXT; } first=first->NEXT; } }
4. Reverse a string
void ReverseString (char *String) { char *Begin = String; char *End = String + strlen(String) - 1; char TempChar; while (Begin < End) { TempChar = *Begin; *Begin = *End; *End = TempChar; Begin++; End- -; } }
5. Insert a node a sorted linked list
void sortedInsert(Node * head, Node* newNode) { Node *current = head; // traverse the list until you find //item bigger the new node value // while ((current!= NULL) && (current->data data)) { current = current->next; } // // insert the new node before the big item // newNode->next = current->next; current = newNode; }
6. Covert a string to upper case
void ToUpper(char * S) { while (*S!=0) { *S=(*S >= 'a' && *S <= 'z')?(*S-'a'+'A'):*S; S++; } }
7. Multiple a number by 7 without using * and + operator.