is ans O(n) ?

1 vote

Let P be a single linked list.Let Q be a pointer to an **intermediate** node 'X' in the list.What is the worst case time complexity of best known algorithm to delete the node 'X ' from the list

closed as a duplicate of:
GATE2004-IT-13

1

@Manu Thakur Suppose you are given a pointer Q which points to the current node (the one that is to be deleted which is intermediate). Now if we want to delete it then the next address of the previous node must point to the next of the present node. Since it is a singly linked list hence we do not have a pointer to the previous node, in order to obtain that pointer we need to traverse the list. This will take o(n).

And intermediate means it can be last but one node also.

Correct me if I am wrong

And intermediate means it can be last but one node also.

Correct me if I am wrong

2

@ashwin

Suppose we have a linked list as follows

A->B->C->D->E and pointer q is given to the node B as B is to be deleted.

q.data = q.next.data;

q.next = q.next.next;

now our modified linked list is

A->C->D->E

B is removed successfully in O(1) we can do such removal in O(1) except last node deletion.

Suppose we have a linked list as follows

A->B->C->D->E and pointer q is given to the node B as B is to be deleted.

q.data = q.next.data;

q.next = q.next.next;

now our modified linked list is

A->C->D->E

B is removed successfully in O(1) we can do such removal in O(1) except last node deletion.

0

but by your operation previous node of Q how get connected to Q->next only Q pointer will be point toQ->next

0

@abhishek node is deleted we can set q to null. because job has been done and we don't require it anymore. And B is already connected to A, we don't need to worry about it. we copied data from Node C and connected it to D.

0

@abhishek Here content of node to which Q is pointing already changed. Hence to need to again point prev of Q to next of Q.

0

we need another pointer who will point to previous node of Q

P->next=Q; then again A will point to C

A->C->D...

but for this question we do not have to do @ Manu Thakur sir ??

2

@abhishek why do you need a pointer the the previous node of the node pointedby q? it is written in the question node to be deleted is an intermediate node.

if question is to delete the last node then we need a pointer which will point to the second last node. hence to delete last TC is O(n) and other than last node each node can be deleted in O(1)

if question is to delete the last node then we need a pointer which will point to the second last node. hence to delete last TC is O(n) and other than last node each node can be deleted in O(1)