Professional Documents
Culture Documents
LINKED LIST
LINKED LIST
Insert at end of Doubly Linked Delete Last Node of a Doubly Linked List
List
Node * deleteLastNode(Node *head)
Node * insertAtTail(Node *head,
int k) {
{
if(head==NULL) if(head==NULL || head->next==NULL)
return new Node(k); return NULL;
Node * temp = head;
Node* curr = new Node(k); Node* temp =head;
while(temp->next!=NULL)
{ Node*prev=NULL;
temp=temp->next;
} while(temp->next!=NULL)
temp->next= new Node(k);
curr->prev=temp; {
return head;
} prev =temp;
prev->next=NULL;
delete temp;
return head;
return curr;
{ if(head==nullptr||head->next==nullptr)
while(curr!=NULL) temp->next=head;
{ head->next=nullptr;
curr->next=prev; }
return prev;
Space Complexity:
return slow;
return NULL;
}
Check if given Linked List is Check if given Linked List is Palindrome
Palindrome
bool isPalindrome(Node *head) Node* reverse(Node* head)
{ {
vector<int>ans; if (head == nullptr || head->next == nullptr)
while(head!=NULL) {
{ return head;
ans.push_back(head->data); }
head = head->next; Node* prev = nullptr;
} Node* curr = head;
int n = ans.size(); Node* temp;
for(int i=0;i<n/2;i++) while (curr != nullptr)
{ {
if(ans[i]!=ans[n-1-i]) temp = curr->next;
{ curr->next = prev;
return false; prev = curr;
} curr = temp;
} }
return true; return prev;
} }
bool isPalindrome(Node* head)
Time Complexity: O(N) {
if (head == nullptr)
Reason: Iterating through the list to {
store elements in the array. return false;
}
Space Complexity: O(N)
Node* slow = head;
Reason: Using an array to store list
Node* fast = head;
elements for further computations.
while (fast->next != nullptr && fast->next->next
!= nullptr)
{ slow = slow->next;
fast = fast->next->next;
}
slow->next = reverse(slow->next);
Node* dummy = head;
while (slow->next != nullptr)
{
if (slow->next->data != dummy->data)
{
return false;
}
slow = slow->next;
dummy = dummy->next;
}
return true;
}
Delete Kth Node From End Delete Kth Node From End
Node* removeKthNode(Node* head, int K) Node* removeKthNode(Node* head, int
{ K)
if (K <= 0 || head == nullptr) {
{ Node * start =new Node();
return head; start->next=head;
} Node * fast = start;
int length = 0; Node*slow = start;
Node* temp = head; for(int i=1;i<=K;i++)
while (temp != nullptr) {
{ fast=fast->next;
length++; }
temp = temp->next; while(fast->next!=NULL)
} {
if (K > length) slow =slow->next;
{ fast=fast->next;
return head; }
} slow->next=slow->next->next;
int indexToRemove = length - K; return start->next;
if (indexToRemove == 0) }
{
Node* newHead = head->next; Time Complexity: O(N)
delete head;
return newHead; Space Complexity: O(1)
}
temp = head;
for (int i = 0; i < indexToRemove - 1; ++i)
{
temp = temp->next;
}
Node* toRemove = temp->next;
temp->next = temp->next->next;
delete toRemove;
return head;
}
T=O(N)+O(N)
S=O(1)
temp->data=2;
two--;
}
temp = temp->next;
}
return head;
}
node* d1 = head1;
node* d2 = head2;
while(d1 != d2) {
d1 = d1 == NULL? head2:d1->next;
d2 = d2 == NULL? head1:d2->next;
return d1;
Remove duplicates from a sorted Doubly Find pairs with given sum in DLL
Linked List
Node *removeDuplicates(Node vector<pair<int, int>> findPairs(Node* head, int k)
*head) { {
if (head == nullptr || head->n== nullptr) vector< pair<int,int>> ans;
return head;
Node* temp =head;
Node *temp = head; while(temp->next!=NULL)
{
while (temp->next != nullptr) Node* curr = temp->next;
{
while(curr!=NULL)
if (temp->data == temp->next->data)
{ {
Node *duplicate = temp->next; if(temp->data + curr->data == k)
temp->next = duplicate->next; {
if (temp->next != nullptr)
ans.push_back({temp->data ,curr->data});
{ }
temp->next->prev = temp; curr=curr->next;
} }
delete duplicate;
} temp=temp->next;
else }
{ return ans;
temp = temp->next;
}
}
}
return head;
}