Pairwise Swap Nodes of a given Linked List - GeeksforGeeks (2024)

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->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.

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:

Pairwise Swap Nodes of a given Linked List - GeeksforGeeks (1)

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.



`; tags.map((tag)=>{ let tag_url = `videos/${getTermType(tag['term_id__term_type'])}/${tag['term_id__slug']}/`; tagContent+=``+ tag['term_id__term_name'] +``; }); tagContent+=`
`; return tagContent; } //function to create related videos cards function articlePagevideoCard(poster_src="", title="", description="", video_link, index, tags=[], duration=0){ let card = `

${secondsToHms(duration)}

${title}
${showLessRelatedVideoDes(htmlToText(description))} ... Read More

${getTagsString(tags)}

`; return card; } //function to set related videos content function getvideosContent(limit=3){ videos_content = ""; var total_videos = Math.min(videos.length, limit); for(let i=0;i

'; } 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

Please Login to comment...

Pairwise Swap Nodes of a given Linked List - GeeksforGeeks (2024)

References

Top Articles
Latest Posts
Article information

Author: Merrill Bechtelar CPA

Last Updated:

Views: 6675

Rating: 5 / 5 (50 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Merrill Bechtelar CPA

Birthday: 1996-05-19

Address: Apt. 114 873 White Lodge, Libbyfurt, CA 93006

Phone: +5983010455207

Job: Legacy Representative

Hobby: Blacksmithing, Urban exploration, Sudoku, Slacklining, Creative writing, Community, Letterboxing

Introduction: My name is Merrill Bechtelar CPA, I am a clean, agreeable, glorious, magnificent, witty, enchanting, comfortable person who loves writing and wants to share my knowledge and understanding with you.