> For the complete documentation index, see [llms.txt](https://txfs19260817.gitbook.io/leetcode-go-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://txfs19260817.gitbook.io/leetcode-go-notes/solutions/1721.-swapping-nodes-in-a-linked-list.md).

# 1721. Swapping Nodes in a Linked List

## LeetCode [1721. Swapping Nodes in a Linked List](https://leetcode-cn.com/problems/swapping-nodes-in-a-linked-list/)

### Description

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://3979976701-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWCWmbVhbhatBCAMIGH%2Fuploads%2Fgit-blob-ffdde8d3e636dc9b2dc8039c09decc85f97f3205%2Fimage%20\(20\).png?alt=media)

```
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]
```

**Constraints:**

* The number of nodes in the list is `n`.
* `1 <= k <= n <= 105`
* `0 <= Node.val <= 100`

### Tags

Linked List

### Solution

Perform the slow-fast pointers strategy to find the value of *the* `kth` *node from the end.* Swap it with the value of \_\_ *the* `kth` *node from the beginning.*

### Complexity

* Time complexity: $$O(n)$$
* Space complexity: $$O(n)$$

### Code

```go
func swapNodes(head *ListNode, k int) *ListNode {
	s, f := head, head
	for i := 1; i < k; i++ {
		f = f.Next
	}
	p := f
	for f.Next != nil {
		s, f = s.Next, f.Next
	}
	s.Val, p.Val = p.Val, s.Val
	return head
}
```
