0% found this document useful (0 votes)
12 views

Micro Interview Link List

The document discusses different ways to check for cycles in a linked list, reverse a doubly linked list by swapping the next and prev pointers at each node, and provides an algorithm to find anagrams in an array of strings by sorting the characters of each string and comparing for duplicates. It also provides a function that compact an integer array by removing duplicates while maintaining sort order.

Uploaded by

Manan Shah
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views

Micro Interview Link List

The document discusses different ways to check for cycles in a linked list, reverse a doubly linked list by swapping the next and prev pointers at each node, and provides an algorithm to find anagrams in an array of strings by sorting the characters of each string and comparing for duplicates. It also provides a function that compact an integer array by removing duplicates while maintaining sort order.

Uploaded by

Manan Shah
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 2

Check for cycle in last

// error checking and checking for NULL at end of list omitted


p1 = p2 = head;

do {
p1 = p1->next;
p2 = p2->next->next;
} while (p1 != p2);

How would you reverse a doubly-linked list?

Node * pCurrent = pHead, *pTemp;


while (pCurrent)
{
pTemp = pCurrent->pNext;
pCurrent->pNext = pCurrent->pPrev;
pCurrent->pPrev = temp;

pHead = pCurrent;

pCurrent = temp;
}

Question: Assume you have an array that contains a number of strings (perhaps char *
a[100]). Each string is a word from the dictionary. Your task, described in high-level terms, is to
devise a way to determine and display all of the anagrams within the array (two words are
anagrams if they contain the same characters; for example, tales and slate are anagrams.)

Answer: Begin by sorting each element in the array in alphabetical order. So, if one element of
your array was slate, it would be rearranged to form aelst (use some mechanism to know that
the particular instance of aelst maps to slate). At this point, you slate and tales would be
identical: aelst.

Next, sort the entire array of these modified dictionary words. Now, all of the anagrams are
grouped together. Finally, step through the array and display duplicate terms, mapping the sorted
letters (aelst) back to the word (slate or tales).

Question: Given the following prototype:

int compact(int * p, int size);

write a function that will take a sorted array, possibly with duplicates, and compact the array,
returning the new length of the array. That is, if p points to an array containing: 1, 3, 7, 7, 8,
9, 9, 9, 10, when the function returns, the contents of p should be: 1, 3, 7, 8, 9, 10, with
a length of 5 returned.

Answer: A single loop will accomplish this.


int compact(int * p, int size)
{
int current, insert = 1;
for (current=1; current < size; current++)
if (p[current] != p[insert-1])
{
p[insert] = p[current];
current++;
insert++;
} else
current++;
}

You might also like