Question
1 : How to find middle element of linked list in one pass?
One of the most popular question from data structures and algorithm,
mostly asked on telephonic interview. Since many programmer know that, in order
to find length of linked list we need to first traverse through linkedlist till
we find last node, which is pointing to null, and then in second pass we can
find middle element by traversing only half of length. They get confused when
interviewer ask him to do same job in one pass. In order to find middle element
of linked list in one pass you need to maintain two pointer, one increment at
each node while other increments after two nodes at a time, by having this
arrangement, when first pointer reaches end, second pointer will point to
middle element of linked list. See this trick to find middle element of linked list in
single pass for more details.
Question
2 : How to find if linked list has loop ?
This question has bit of similarity with earlier algorithm and data
structure interview question. I mean we can use two pointer approach to solve
this problem. If we maintain two pointers, and we increment one pointer after
processing two nodes and other after processing every node, we are likely to
find a situation where both the pointers will be pointing to same node. This
will only happen if linked list has loop.
Question
3 : In an integer array, there is 1 to 100 number, out of one is duplicate, how to find ?
This is a rather simple data structures question, especially for this
kind of. In this case you can simply add all numbers stored in array, and total
sum should be equal to n(n+1)/2. Now just subtract actual sum to
expected sum, and that is your duplicate number. Of course there is a brute
force way of checking each number against all other numbers, but that will
result in performance of O(n^2) which is not good. By the way this trick will
not work if array have multiple duplicates or its not numbers forming
arithmetic progression.
No comments:
Post a Comment