# Pairwise swap adjacent nodes of a linked list by changing pointers | Set 2

Given a singly linked list, write a function to swap elements pairwise.

```Input : 1->2->3->4->5->6->7
Output : 2->1->4->3->6->5->7,

Input : 1->2->3->4->5->6
Output : 2->1->4->3->6->5```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

A solution has been discussed set 1. Here a simpler solution is discussed. We explicitly change pointers of first two nodes, then fix remaining nodes.

## C++

 `/* This program swaps the nodes of linked list  ` `   ``rather than swapping the field from the nodes. ` `   ``Imagine a case where a node contains many  ` `   ``fields, there will be plenty of unnecessary  ` `   ``swap calls. */` `#include ` `using` `namespace` `std; ` ` `  `/* A linked list node */` `struct` `Node ` `{ ` `    ``int` `data; ` `    ``struct` `Node *next; ` `}; ` ` `  `/* Function to pairwise swap elements of a ` `   ``linked list */` `Node *pairWiseSwap(Node *head) ` `{ ` `    ``// If linked list is empty or there is only ` `    ``// one node in list ` `    ``if` `(head == NULL || head->next == NULL) ` `        ``return` `head; ` ` `  `    ``// Fix the head and its next explicitly to ` `    ``// avoid many if else in while loop ` `    ``Node *curr = head->next->next; ` `    ``Node *prev = head; ` `    ``head = head->next; ` `    ``head->next = prev; ` ` `  `    ``// Fix remaining nodes ` `    ``while` `(curr != NULL && curr->next != NULL) ` `    ``{ ` `        ``prev->next = curr->next; ` `        ``prev = curr; ` `        ``Node *next = curr->next->next; ` `        ``curr->next->next = curr; ` `        ``curr = next; ` `    ``} ` `     `  `    ``prev->next = curr; ` ` `  `    ``return` `head; ` `} ` ` `  `/* Function to add a node at the beginning of  ` `   ``Linked List */` `void` `push(``struct` `Node** head_ref, ``int` `new_data) ` `{ ` `    ``struct` `Node* new_node = ``new` `Node; ` `    ``new_node->data = new_data; ` `    ``new_node->next = (*head_ref); ` `    ``(*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; ` `    ``} ` `} ` ` `  `/* Druver program to test above function */` `int` `main() ` `{ ` `    ``struct` `Node *start = NULL; ` ` `  `    ``/* The constructed linked list is: ` `    ``1->2->3->4->5->6->7 */` `    ``push(&start, 7); ` `    ``push(&start, 6); ` `    ``push(&start, 5); ` `    ``push(&start, 4); ` `    ``push(&start, 3); ` `    ``push(&start, 2);  ` `    ``push(&start, 1); ` ` `  `    ``printf``(``"\n Linked list before calling pairWiseSwap() "``); ` `    ``printList(start); ` ` `  `    ``start = pairWiseSwap(start); ` ` `  `    ``printf``(``"\n Linked list after calling pairWiseSwap() "``); ` `    ``printList(start); ` ` `  `    ``return` `0; ` `} `

## Java

 `/* This program swaps the nodes of linked list  ` `rather than swapping the field from the nodes.  ` `Imagine a case where a node contains many  ` `fields, there will be plenty of unnecessary  ` `swap calls. */` `class` `GfG  ` `{  ` ` `  `/* A linked list node */` `static` `class` `Node  ` `{  ` `    ``int` `data;  ` `    ``Node next;  ` `} ` `static` `Node head = ``null``; ` ` `  `/* Function to pairwise swap elements of a  ` `linked list */` `static` `Node pairWiseSwap(Node head)  ` `{  ` `     `  `    ``// If linked list is empty or there is only  ` `    ``// one node in list  ` `    ``if` `(head == ``null` `|| head.next == ``null``)  ` `        ``return` `head;  ` ` `  `    ``// Fix the head and its next explicitly to  ` `    ``// avoid many if else in while loop  ` `    ``Node curr = head.next.next;  ` `    ``Node prev = head;  ` `    ``head = head.next;  ` `    ``head.next = prev;  ` ` `  `    ``// Fix remaining nodes  ` `    ``while` `(curr != ``null` `&& curr.next != ``null``)  ` `    ``{  ` `        ``prev.next = curr.next;  ` `        ``prev = curr;  ` `        ``Node next = curr.next.next;  ` `        ``curr.next.next = curr;  ` `        ``curr = next;  ` `    ``}  ` `     `  `    ``prev.next = curr;  ` ` `  `    ``return` `head;  ` `}  ` ` `  `/* Function to add a node at the  ` `beginning of Linked List */` `static` `void` `push(``int` `new_data)  ` `{  ` `    ``Node new_node = ``new` `Node();  ` `    ``new_node.data = new_data;  ` `    ``new_node.next = (head);  ` `    ``(head) = new_node;  ` `}  ` ` `  `/* Function to print nodes in a given linked list */` `static` `void` `printList(Node node)  ` `{  ` `    ``while` `(node != ``null``)  ` `    ``{  ` `        ``System.out.print(node.data + ``" "``);  ` `        ``node = node.next;  ` `    ``}  ` `}  ` ` `  `/* Driver code */` `public` `static` `void` `main(String[] args)  ` `{  ` `    ``//Node head = null;  ` ` `  `    ``/* The constructed linked list is:  ` `    ``1->2->3->4->5->6->7 */` `    ``push( ``7``);  ` `    ``push( ``6``);  ` `    ``push( ``5``);  ` `    ``push( ``4``);  ` `    ``push(``3``);  ` `    ``push( ``2``);  ` `    ``push( ``1``);  ` ` `  `    ``System.out.print(``"\n Linked list before calling pairWiseSwap() "``);  ` `    ``printList(head);  ` ` `  `    ``Node start = pairWiseSwap(head);  ` ` `  `    ``System.out.print(``"\n Linked list after calling pairWiseSwap() "``);  ` `    ``printList(start);  ` `} ` `}  ` ` `  `// This code is contributed by Prerna Saini. `

## C#

 `/* This program swaps the nodes of linked list  ` `rather than swapping the field from the nodes.  ` `Imagine a case where a node contains many  ` `fields, there will be plenty of unnecessary  ` `swap calls. */` `using` `System; ` ` `  `class` `GfG  ` `{  ` ` `  `/* A linked list node */` `class` `Node  ` `{  ` `    ``public` `int` `data;  ` `    ``public` `Node next;  ` `} ` `static` `Node head = ``null``; ` ` `  `/* Function to pairwise swap   ` `elements of a linked list */` `static` `Node pairWiseSwap(Node head)  ` `{  ` `     `  `    ``// If linked list is empty or there  ` `    ``//  is only one node in list  ` `    ``if` `(head == ``null` `|| head.next == ``null``)  ` `        ``return` `head;  ` ` `  `    ``// Fix the head and its next explicitly to  ` `    ``// avoid many if else in while loop  ` `    ``Node curr = head.next.next;  ` `    ``Node prev = head;  ` `    ``head = head.next;  ` `    ``head.next = prev;  ` ` `  `    ``// Fix remaining nodes  ` `    ``while` `(curr != ``null` `&& curr.next != ``null``)  ` `    ``{  ` `        ``prev.next = curr.next;  ` `        ``prev = curr;  ` `        ``Node next = curr.next.next;  ` `        ``curr.next.next = curr;  ` `        ``curr = next;  ` `    ``}  ` `     `  `    ``prev.next = curr;  ` `    ``return` `head;  ` `}  ` ` `  `/* Function to add a node at the  ` `beginning of Linked List */` `static` `void` `push(``int` `new_data)  ` `{  ` `    ``Node new_node = ``new` `Node();  ` `    ``new_node.data = new_data;  ` `    ``new_node.next = (head);  ` `    ``(head) = new_node;  ` `}  ` ` `  `/* Function to print nodes ` `in a given linked list */` `static` `void` `printList(Node node)  ` `{  ` `    ``while` `(node != ``null``)  ` `    ``{  ` `        ``Console.Write(node.data + ``" "``);  ` `        ``node = node.next;  ` `    ``}  ` `}  ` ` `  `/* Driver code */` `public` `static` `void` `Main()  ` `{  ` `    ``//Node head = null;  ` ` `  `    ``/* The constructed linked list is:  ` `    ``1->2->3->4->5->6->7 */` `    ``push( 7);  ` `    ``push( 6);  ` `    ``push( 5);  ` `    ``push( 4);  ` `    ``push(3);  ` `    ``push( 2);  ` `    ``push( 1);  ` ` `  `    ``Console.Write(``"\n Linked list before"` `+ ` `                ``"calling pairWiseSwap() "``);  ` `    ``printList(head);  ` ` `  `    ``Node start = pairWiseSwap(head);  ` ` `  `    ``Console.Write(``"\n Linked list after"` `+  ` `                ``"calling pairWiseSwap() "``);  ` `    ``printList(start);  ` `} ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

Output:

```Linked list before calling pairWiseSwap() 1 2 3 4 5 6 7
Linked list after calling pairWiseSwap() 2 1 4 3 6 5 7
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.