⭐️⭐️
# 題目敘述
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; | |
} | |
} |