⭐️⭐️

# 題目敘述

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

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]

# Solution

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapNodes(ListNode* head, int k) {
        int len = 0;
        ListNode* tmp = head;
        while (tmp) {
            len++;
            tmp = tmp->next;
        }
        ListNode* left = head;
        ListNode* right = head;
        for (int i=1; i<k; i++) left = left->next;
        for (int j=1; j<=len-k; j++) right = right->next;
        swap(left->val, right->val);
        return head;
    }
};
class Solution {
    public ListNode swapNodes(ListNode head, int k) {
        ListNode start = head, end = head;
        
        for (int i = 1; i < k; i++) {
            start = start.next;
        }
        
        ListNode curr = start;
        while (curr.next != null) {
            curr = curr.next;
            end = end.next;
        }
        
        int temp = start.val;
        start.val = end.val;
        end.val = temp;
        
        return head;
    }
}