Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
reverse linked list
  • Loading branch information
Dhruvk13 authored Oct 29, 2022
commit a040def72b65c6972b0b0a100d42fade7c40e690
114 changes: 114 additions & 0 deletions C++/reverseLinkedList.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
#include <bits/stdc++.h>
using namespace std;
class node
{
public:
int data;
node *next;
node(int val)
{
data = val;
next = NULL;
}
};
// iterative approach
node *reverse(node *&head)
{
node *prevPtr = NULL;
node *currPtr = head;
node *nextPtr;
while (currPtr != NULL)
{
nextPtr = currPtr->next;
currPtr->next = prevPtr;
prevPtr = currPtr;
currPtr = nextPtr;
}
return prevPtr; // new head
}

// recursive approach
node *reverseRecursive(node *&head)
{

// base condition
if (head == NULL || head->next == NULL)
{
return head;
}
node *newHead = reverseRecursive(head->next);
head->next->next = head;
head->next = NULL;
return newHead;
}

node *reverseK(node *&head, int k)
{
node *prevPtr = NULL;
node *currPtr = head;
node *nextPtr;
int count = 0;
while (currPtr != NULL && count < k)
{
nextPtr = currPtr->next;
currPtr->next = prevPtr;
prevPtr = currPtr;
currPtr = nextPtr;

count++;
} // k nodes

if (nextPtr != NULL)
{
head->next = reverseK(nextPtr, k);
}
return prevPtr;
}
void insertAtTail(node *&head, int val)
{

node *newNode = new node(val); // created a new node;
if (head == NULL)
{
head = newNode;
return;
// here you can simply call insertAtBeginning
}
node *temp = head;
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = newNode;
// as our new node already points to NULL in its next so we simply do nothing
}

void display(node *head)
{

if (head == NULL)
{
cout << "NULL" << endl;
return;
}
node *temp = head;
while (temp != NULL)
{
cout << temp->data << "->";
temp = temp->next;
}
cout << "NULL" << endl;
}

int main()
{
node *head = NULL;
insertAtTail(head, 1);
insertAtTail(head, 23);
insertAtTail(head, 12);
insertAtTail(head, 10);
display(head);
int k = 2;
node *newHead = reverseK(head, k);
display(newHead);
}