March LeetCoding Challenge 2021 — Day 14: Swapping Nodes in a Linked List
Tags: computerscience, algorithms, codenewbie, 100daysofcode
Published: 2021-03-17 05:33:35



## Problem Statement

You are given the head of a linked list, and an integer k.

Return *the head of the linked list after **swapping **the values of the *kth *node from the beginning and the *kth *node from the end (the list is **1-indexed**).*

**Example 1:**

![](https://cdn-images-1.medium.com/max/2000/0*ozd8UtUMMkUGyuIn.jpg)

    **Input:** head = [1,2,3,4,5], k = 2
    **Output:** [1,4,3,2,5]

**Example 2:**

    **Input:** head = [7,9,6,6,7,8,3,0,9,5], k = 5
    **Output:** [7,9,6,6,8,7,3,0,9,5]

**Example 3:**

    **Input:** head = [1], k = 1
    **Output:** [1]

**Example 4:**

    **Input:** head = [1,2], k = 1
    **Output:** [2,1]

**Example 5:**

    **Input:** head = [1,2,3], k = 2
    **Output:** [1,2,3]

**Constraints:**

* The number of nodes in the list is n.

* 1 <= k <= n <= 105

* 0 <= Node.val <= 100

## Solution

In this problem, we have to swap the k -th node from the beginning with the k -th node from the end. This is a straight forward LinkedList problem.

Here we are using the 4 nodes.

* fast— This is the k -th node from the end

* slow — This is the k -th node from the start

* first & second — They are used for swapping (to increase readability also)

**Algorithm**:

* First travel k-1 nodes with the fast node. Save the fast node in the first variable.

* Now travel till the end of the list, and do fast = fast.next and slow=slow.next .

* When fast.next==null , we store the slow in the second variable. This second variable is the position k nodes before the end.

* Now swap the values of first and second node.

The code is given below.
{% gist https://gist.github.com/sksaikia/77f3dc2737430d123bf89123474deb86.js %}
The code can be found here

{%github sksaikia/LeetCode %}

Check out my other posts on March LeetCoding Challenge 2021.

 1. [March LeetCoding Challenge — Day 1 — Distribute Candies](https://medium.com/dev-genius/march-leetcoding-challenge-2021-problem-1-distribute-candies-f37f66ea7ee9)

 2. [March LeetCoding Challenge — Day 2 — Set Mismatch](https://sourav-saikia.medium.com/march-leetcoding-challenge-2021-day-2-set-mismatch-4abd5ee491c9)

 3. [March LeetCoding Challenge — Day 3 — Missing Number](https://sourav-saikia.medium.com/march-leetcoding-challenge-2021-day-3-missing-number-ae8ee45a58cb)

 4. [March LeetCoding Challenge — Day 4 — Intersection of Two Linked Lists](https://sourav-saikia.medium.com/march-leetcoding-challenge-2021-day-4-intersection-of-two-linked-lists-a775449b5563)

 5. [March LeetCoding Challenge — Day 5 — Average of Levels in Binary Tree](https://link.medium.com/sC9L595opeb)

 6. [March LeetCoding Challenge — Day 6 — Short Encoding of Words](https://medium.com/leetcode-simplified/march-leetcoding-challenge-2021-day-6-short-encoding-of-words-7fed4bfae557)

 7. [March LeetCoding Challenge — Day 7 — Design HashMap](https://levelup.gitconnected.com/leetcode-706-design-hashmap-march-leetcoding-challenge-2021-fdae1a4adbc)

 8. [March LeetCoding Challenge — Day 8 — Remove Palindromic Subsequences](https://sourav-saikia.medium.com/march-leetcoding-challenge-2021-day-8-remove-palindromic-subsequences-12b037705722)

 9. [March LeetCoding Challenge — Day 10 — Integer to Roman](https://medium.com/leetcode-simplified/march-leetcoding-challenge-2021-day-10-integer-to-roman-76caa87a0e07)

 10. [March LeetCoding Challenge — Day 12 — Check If a String Contains All Binary Codes of Size K](https://medium.com/dev-genius/march-leetcoding-challenge-2021-day-12-check-if-a-string-contains-all-binary-codes-of-size-k-48f1fed4d9b9)