Last Updated : 01 Feb, 2023
Improve
Improve
Like Article
Like
Save
Report
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->NULLInput : 1->2->3->4->5->NULL
Output : 2->1->4->3->5->NULLInput : 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.
Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.
METHOD 1 (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++
// C++ program to pairwise swap elements
// in a given linked list
#include <bits/stdc++.h>
using
namespace
std;
/* A linked list node */
class
Node {
public
:
int
data;
Node* next;
};
/* Function to pairwise swap elements
of a linked list */
void
pairWiseSwap(Node* head)
{
Node* temp = head;
/* Traverse further only if
there are at-least two nodes left */
while
(temp != NULL && temp->next != NULL) {
/* Swap data of node with
its next node's data */
swap(temp->data,
temp->next->data);
/* Move temp by 2 for the next pair */
temp = temp->next->next;
}
}
/* Function to add a node at the
beginning of Linked List */
void
push(Node** head_ref,
int
new_data)
{
/* allocate node */
Node* new_node =
new
Node();
/* put in the data */
new_node->data = new_data;
/* link the old list of the new node */
new_node->next = (*head_ref);
/* move the head to point
to the new node */
(*head_ref) = new_node;
}
/* Function to print nodes
in a given linked list */
void
printList(Node* node)
{
while
(node != NULL) {
cout << node->data <<
" "
;
node = node->next;
}
}
// Driver Code
int
main()
{
Node* start = NULL;
/* The constructed linked list is:
1->2->3->4->5 */
push(&start, 5);
push(&start, 4);
push(&start, 3);
push(&start, 2);
push(&start, 1);
cout <<
"Linked list "
<<
"before calling pairWiseSwap()\n"
;
printList(start);
pairWiseSwap(start);
cout <<
"\nLinked list "
<<
"after calling pairWiseSwap()\n"
;
printList(start);
return
0;
}
// This code is contributed
// by rathbhupendra
C
/* C program to pairwise swap elements in a given linked list */
#include <stdio.h>
#include <stdlib.h>
/* A linked list node */
struct
Node {
int
data;
struct
Node* next;
};
/*Function to swap two integers at addresses a and b */
void
swap(
int
* a,
int
* b);
/* Function to pairwise swap elements of a linked list */
void
pairWiseSwap(
struct
Node* head)
{
struct
Node* temp = head;
/* Traverse further only if there are at-least two nodes left */
while
(temp != NULL && temp->next != NULL) {
/* Swap data of node with its next node's data */
swap(&temp->data, &temp->next->data);
/* Move temp by 2 for the next pair */
temp = temp->next->next;
}
}
/* UTILITY FUNCTIONS */
/* Function to swap two integers */
void
swap(
int
* a,
int
* b)
{
int
temp;
temp = *a;
*a = *b;
*b = temp;
}
/* Function to add a node at the beginning of Linked List */
void
push(
struct
Node** head_ref,
int
new_data)
{
/* allocate node */
struct
Node* new_node = (
struct
Node*)
malloc
(
sizeof
(
struct
Node));
/* put in the data */
new_node->data = new_data;
/* link the old list of the new node */
new_node->next = (*head_ref);
/* move the head to point to the new node */
(*head_ref) = new_node;
}
/* Function to print nodes in a given linked list */
void
printList(
struct
Node* node)
{
while
(node != NULL) {
printf
(
"%d "
, node->data);
node = node->next;
}
}
/* Driver program to test above function */
int
main()
{
struct
Node* start = NULL;
/* The constructed linked list is:
1->2->3->4->5 */
push(&start, 5);
push(&start, 4);
push(&start, 3);
push(&start, 2);
push(&start, 1);
printf
(
"Linked list before calling pairWiseSwap()\n"
);
printList(start);
pairWiseSwap(start);
printf
(
"\nLinked list after calling pairWiseSwap()\n"
);
printList(start);
return
0;
}
Java
// Java program to pairwise swap elements of a linked list
import
java.io.*;
class
LinkedList {
Node head;
// head of list
/* Linked list Node*/
class
Node {
int
data;
Node next;
Node(
int
d)
{
data = d;
next =
null
;
}
}
void
pairWiseSwap()
{
Node temp = head;
/* Traverse only till there are atleast 2 nodes left */
while
(temp !=
null
&& temp.next !=
null
) {
/* Swap the data */
int
k = temp.data;
temp.data = temp.next.data;
temp.next.data = k;
temp = temp.next.next;
}
}
/* Utility functions */
/* Inserts a new Node at front of the list. */
public
void
push(
int
new_data)
{
/* 1 & 2: Allocate the Node &
Put in the data*/
Node new_node =
new
Node(new_data);
/* 3. Make next of new Node as head */
new_node.next = head;
/* 4. Move the head to point to new Node */
head = new_node;
}
/* Function to print linked list */
void
printList()
{
Node temp = head;
while
(temp !=
null
) {
System.out.print(temp.data +
" "
);
temp = temp.next;
}
System.out.println();
}
/* Driver program to test above functions */
public
static
void
main(String args[])
{
LinkedList llist =
new
LinkedList();
/* Created Linked List 1->2->3->4->5 */
llist.push(
5
);
llist.push(
4
);
llist.push(
3
);
llist.push(
2
);
llist.push(
1
);
System.out.println(
"Linked List before calling pairWiseSwap() "
);
llist.printList();
llist.pairWiseSwap();
System.out.println(
"Linked List after calling pairWiseSwap() "
);
llist.printList();
}
}
/* This code is contributed by Rajat Mishra */
Python
# Python program to swap the elements of linked list pairwise
# Node class
class
Node:
# Constructor to initialize the node object
def
__init__(
self
, data):
self
.data
=
data
self
.
next
=
None
class
LinkedList:
# Function to initialize head
def
__init__(
self
):
self
.head
=
None
# Function to pairwise swap elements of a linked list
def
pairwiseSwap(
self
):
temp
=
self
.head
# There are no nodes in linked list
if
temp
is
None
:
return
# Traverse furthethr only if there are at least two
# left
while
(temp
and
temp.
next
):
# If both nodes are same,
# no need to swap data
if
(temp.data !
=
temp.
next
.data):
# Swap data of node with its next node's data
temp.data, temp.
next
.data
=
temp.
next
.data, temp.data
# Move temp by 2 to the next pair
temp
=
temp.
next
.
next
# Function to insert a new node at the beginning
def
push(
self
, new_data):
new_node
=
Node(new_data)
new_node.
next
=
self
.head
self
.head
=
new_node
# Utility function to print the linked LinkedList
def
printList(
self
):
temp
=
self
.head
while
(temp):
print
temp.data,
temp
=
temp.
next
# Driver program
llist
=
LinkedList()
llist.push(
5
)
llist.push(
4
)
llist.push(
3
)
llist.push(
2
)
llist.push(
1
)
print
"Linked list before calling pairWiseSwap() "
llist.printList()
llist.pairwiseSwap()
print
"\nLinked list after calling pairWiseSwap()"
llist.printList()
# This code is contributed by Nikhil Kumar Singh(nickzuck_007)
C#
// C# program to pairwise swap elements of a linked list
using
System;
class
LinkedList {
Node head;
// head of list
/* Linked list Node*/
public
class
Node {
public
int
data;
public
Node next;
public
Node(
int
d)
{
data = d;
next =
null
;
}
}
void
pairWiseSwap()
{
Node temp = head;
/* Traverse only till there are atleast 2 nodes left */
while
(temp !=
null
&& temp.next !=
null
) {
/* Swap the data */
int
k = temp.data;
temp.data = temp.next.data;
temp.next.data = k;
temp = temp.next.next;
}
}
/* Utility functions */
/* Inserts a new Node at front of the list. */
public
void
push(
int
new_data)
{
/* 1 & 2: Allocate the Node &
Put in the data*/
Node new_node =
new
Node(new_data);
/* 3. Make next of new Node as head */
new_node.next = head;
/* 4. Move the head to point to new Node */
head = new_node;
}
/* Function to print linked list */
void
printList()
{
Node temp = head;
while
(temp !=
null
) {
Console.Write(temp.data +
" "
);
temp = temp.next;
}
Console.WriteLine();
}
/* Driver program to test above functions */
public
static
void
Main(String[] args)
{
LinkedList llist =
new
LinkedList();
/* Created Linked List 1->2->3->4->5 */
llist.push(5);
llist.push(4);
llist.push(3);
llist.push(2);
llist.push(1);
Console.WriteLine(
"Linked List before calling pairWiseSwap() "
);
llist.printList();
llist.pairWiseSwap();
Console.WriteLine(
"Linked List after calling pairWiseSwap() "
);
llist.printList();
}
}
// This code is contributed by Arnab Kundu
Javascript
<script>
// JavaScript program to pairwise swap
// elements of a linked list
var
head;
// head of list
/* Linked list Node */
class Node {
constructor(val) {
this
.data = val;
this
.next =
null
;
}
}
function
pairWiseSwap() {
var
temp = head;
/* Traverse only till there are
atleast 2 nodes left */
while
(temp !=
null
&& temp.next !=
null
) {
/* Swap the data */
var
k = temp.data;
temp.data = temp.next.data;
temp.next.data = k;
temp = temp.next.next;
}
}
/* Utility functions */
/* Inserts a new Node at front of the list. */
function
push(new_data) {
/*
* 1 & 2: Allocate the Node & Put in the data
*/
var
new_node =
new
Node(new_data);
/* 3. Make next of new Node as head */
new_node.next = head;
/* 4. Move the head to point to new Node */
head = new_node;
}
/* Function to print linked list */
function
printList() {
var
temp = head;
while
(temp !=
null
) {
document.write(temp.data +
" "
);
temp = temp.next;
}
document.write(
"<br/>"
);
}
/* Driver program to test above functions */
/* Created Linked List 1->2->3->4->5 */
push(5);
push(4);
push(3);
push(2);
push(1);
document.write(
"Linked List before calling pairWiseSwap() <br/>"
);
printList();
pairWiseSwap();
document.write(
"Linked List after calling pairWiseSwap()<br/> "
);
printList();
// This code is contributed by todaysgaurav
</script>
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), As we traverse the linked list only once.
Auxiliary Space: O(1), As constant extra space is used.
METHOD 2 (Recursive)
If there are 2 or more than 2 nodes in Linked List then swap the first two nodes and recursively call for the rest of the list.
Below image is a dry run of the above approach:
Below is the implementation of the above approach:
C++
/* Recursive function to pairwise swap elements
of a linked list */
void
pairWiseSwap(node* head)
{
/* There must be at-least two nodes in the list */
if
(head != NULL && head->next != NULL) {
/* Swap the node's data with data of next node */
swap(head->data, head->next->data);
/* Call pairWiseSwap() for rest of the list */
pairWiseSwap(head->next->next);
}
}
// The code is contributed by Gautam goel (gautamgoel962)
C
/* Recursive function to pairwise swap elements
of a linked list */
void
pairWiseSwap(
struct
node* head)
{
/* There must be at-least two nodes in the list */
if
(head != NULL && head->next != NULL) {
/* Swap the node's data with data of next node */
swap(head->data, head->next->data);
/* Call pairWiseSwap() for rest of the list */
pairWiseSwap(head->next->next);
}
}
Python3
# Recursive function to pairwise swap elements of a linked list
def
pairWiseSwap(head):
# There must be at-least two nodes in the list
if
(head !
=
None
and
head.
next
!
=
None
):
# Swap the node's data with data of next node
swap(head.data, head.
next
.data)
# Call pairWiseSwap() for rest of the list
pairWiseSwap(head.
next
.
next
)
# This code is contributed by _saurabh_jaiswal
C#
/* Recursive function to pairwise swap elements
of a linked list */
static
void
pairWiseSwap(node head)
{
/* There must be at-least two nodes in the list */
if
(head !=
null
&& head.next !=
null
) {
/* Swap the node's data with data of next node */
swap(head.data, head.next.data);
/* Call pairWiseSwap() for rest of the list */
pairWiseSwap(head.next.next);
}
}
// This code contributed by aashish1995
Javascript
<script>
/* Recursive function to pairwise swap elements
of a linked list */
function
pairWiseSwap(head)
{
/* There must be at-least two nodes in the list */
if
(head !=
null
&& head.next !=
null
) {
/* Swap the node's data with data of next node */
swap(head.data, head.next.data);
/* Call pairWiseSwap() for rest of the list */
pairWiseSwap(head.next.next);
}
}
// This code is contributed by avanitrachhadiya2155
</script>
Java
/* Recursive function to pairwise swap elements
of a linked list */
public
static
void
pairWiseSwap(Node head)
{
/* There must be at-least two nodes in the list */
if
(head !=
null
&& head.next !=
null
) {
/* Swap the node's data with data of next node */
int
temp = head.data;
head.data = head.next.data;
head.next.data = temp;
/* Call pairWiseSwap() for rest of the list */
pairWiseSwap(head.next.next);
}
}
Time complexity: O(n)
Auxiliary Space: O(1), As it is a tail recursive function, function call stack would not be build and thus no extra space will be used.
The solution provided here swaps data of nodes. If the data contains many fields (for example a linked list of Student Objects), the swap operation will be costly. See the below article for a better solution that works well for all kind of linked lists
Pairwise Swap Nodes by Changing Links
Please write comments if you find any bug in the above code/algorithm, or find other ways to solve the same problem.
${secondsToHms(duration)}
${getTagsString(tags)}
'; } else{ let view_all_url = `${GFG_SITE_URL}videos/`; videos_content+=`
View All
`; } // videos_content+= '
'; } } return videos_content; } //function to show main video content with related videos content async function showMainVideoContent(main_video, course_link){ //Load main video $(".video-main").html(`
`); require(["ima"], function() { var player = videojs('article-video', { controls: true, // autoplay: true, // muted: true, controlBar: { pictureInPictureToggle: false }, playbackRates: [0.5, 0.75, 1, 1.25, 1.5, 2], poster: main_video['meta']['largeThumbnail'], sources: [{src: main_video['source'], type: 'application/x-mpegURL'}], tracks: [{src: main_video['subtitle'], kind:'captions', srclang: 'en', label: 'English', default: true}] },function() { player.qualityLevels(); try { player.hlsQualitySelector(); } catch (error) { console.log("HLS not working - ") } } ); const video = document.querySelector("video"); const events =[ { 'name':'play', 'callback':()=>{videoPlayCallback(main_video['slug'])} }, ]; events.forEach(event=>{ video.addEventListener(event.name,event.callback); }); }, function (err) { var player = videojs('article-video'); player.createModal('Something went wrong. Please refresh the page to load the video.'); }); /*let video_date = main_video['time']; video_date = video_date.split("/"); video_date = formatDate(video_date[2], video_date[1], video_date[0]); let share_section_content = `
${video_date}
`;*/ let hasLikeBtn = false; // console.log(share_section_content); var data = {}; if(false){ try { if((loginData && loginData.isLoggedIn == true)){ const resp = await fetch(`${API_SCRIPT_URL}logged-in-video-details/${main_video['slug']}/`,{ credentials: 'include' }) if(resp.status == 200 || resp.status == 201){ data = await resp.json(); share_section_content+= `
`; hasLikeBtn = true; } else { share_section_content+= `
`; } } else { share_section_content+= `
`; } //Load share section // $(".video-share-section").html(share_section_content); // let exitCond = 0; // const delay = (delayInms) => { // return new Promise(resolve => setTimeout(resolve, delayInms)); // } // while(!loginData){ // let delayres = await delay(1000); // exitCond+=1; // console.log(exitCond); // if(exitCond>5){ // break; // } // } // console.log(loginData); /*if(hasLikeBtn && loginData && loginData.isLoggedIn == true){ setLiked(data.liked) setSaved(data.watchlist) }*/ } catch (error) { console.log(error); } } //Load video content like title, description if(false){ $(".video-content-section").html(`
${main_video['title']}
${hideMainVideoDescription(main_video['description'], main_video['id'])}
${getTagsString(main_video['category'])} ${(course_link.length)? `
View Course
`:''} `); let related_vidoes = main_video['recommendations']; if(!!videos && videos.length>0){ //Load related videos $(".related-videos-content").html(getvideosContent()); } } //show video content element = document.getElementById('article-video-tab-content'); element.style.display = 'block'; $('.spinner-loading-overlay:eq(0)').remove(); $('.spinner-loading-overlay:eq(0)').remove(); } await showMainVideoContent(video_data, course_link); // fitRelatedVideosDescription(); } catch (error) { console.log(error); } } getVideoData(); /* $(window).resize(function(){ onWidthChangeEventsListener(); }); $('#video_nav_tab').click('on', function(){ fitRelatedVideosDescription(); });*/ });
Like Article
Suggest improvement
Next
Pairwise Swap Nodes of a given linked list by changing links
Share your thoughts in the comments