题意理解
给定一个链表,和一个整数k,交换第k个链表节点和倒数第k个链表节点
问题分析
先遍历一遍得到长度n
再从头到尾遍历到第k-1个节点,记录下来
再从头到尾遍历到第n-k个节点,记录下来
交换第k个节点值和第n-k+1个节点的值。
其他
题目不难,但是如果不交换值而是交换节点,就很烦。
链接
https://leetcode-cn.com/problems/swapping-nodes-in-a-linked-list/
/**
* 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) {
ListNode* p = head;
int length = 0;
while(p) {
length ++;
p = p -> next;
}
ListNode* forward = head;
ListNode* backward = head;
if (k == 0) return head;
for (int i = 1; i <= k-1; i++) {
forward = forward -> next;
}
cout << forward -> val << endl;
for (int i = 1; i <= length - k ; i++) {
backward = backward -> next;
}
cout << backward -> val << endl;
cout << "wer" << endl;
/* p = forward -> next;
ListNode* q = backward -> next;
forward -> next = q;
backward -> next = p;
ListNode* r = q -> next;
q->next = p->next;
p->next = r;
*/
int val = forward -> val;
forward -> val = backward -> val;
backward -> val = val;
cout << "www" << endl;
return head;
}
};