Given a singly linked list, write a function to swap elements pairwise.
Input: 1->2->3->4->5->6->NULL
Output: 2->1->4->3->6->5->NULL
Input: 1->2->3->4->5->NULL
Output: 2->1->4->3->5->NULL
Input: 1->NULL
Output: 1->NULL
For example, if the linked list is 1->2->3->4->5 then the function should change it to 2->1->4->3->5, and if the linked list is then the function should change it to.
METHOD (Iterative):
Start from the head node and traverse the list. While traversing swap data of each node with its next node’s data.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
class Node
{
public :
int data;
Node* next;
};
void pairWiseSwap(Node* head)
{
Node* temp = head;
while (temp != NULL &&
temp->next != NULL)
{
swap(temp->data,
temp->next->data);
temp = temp->next->next;
}
}
void push(Node** head_ref,
int new_data)
{
Node* new_node = new Node();
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
void printList(Node* node)
{
while (node != NULL)
{
cout << node->data << " " ;
node = node->next;
}
}
int main()
{
Node* start = NULL;
push(&start, 5);
push(&start, 4);
push(&start, 3);
push(&start, 2);
push(&start, 1);
cout << "Linked list " <<
"before calling pairWiseSwap()" ;
printList(start);
pairWiseSwap(start);
cout << "Linked list " <<
"after calling pairWiseSwap()" ;
printList(start);
return 0;
}
|
Output:
Linked list before calling pairWiseSwap()
1 2 3 4 5
Linked list after calling pairWiseSwap()
2 1 4 3 5
Time complexity: O(n)
Auxiliary Space: O(1)
Please refer complete article on Pairwise swap elements of a given linked list for more details!