
Problem: 1721. 交换链表中的节点计算长度的然后拿到两个node的pre, now, next若n - k k -1则令k n- k 1特殊情况是k 1和now2 next1交换两者的数值就可以了更优方案的Code/** * 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* now head; int n 0; while(now ! nullptr) { n; now now-next; } if(n 1) return head; ListNode* ptr head, *pre1 nullptr, *now1, *next1 nullptr, *pre2 nullptr, *now2, *next2 nullptr, *pre nullptr; if( n - k k - 1 ) k n - k 1; int num 0, last n - k 1; while(ptr !nullptr) { num; if(num k) { pre1 pre; now1 ptr; next1 ptr-next; } if(num last) { pre2 pre; now2 ptr; next2 ptr-next; } pre ptr; ptr ptr-next; } if(now2 next1) { if(k 1) { now2-next now1; now1-next nullptr; return now2; } else { pre1-next now2; now2-next now1; now1-next next2; } return head; } if(k 1) { now2-next next1; pre2-next now1; now1-next nullptr; return now2; } now2-next next1; pre1-next now2; pre2-next now1; now1-next next2; return head; } };Code/** * 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) { vectorListNode* tr; ListNode* ptr head; while(ptr !nullptr) { tr.push_back(ptr); ptr ptr-next; } int n tr.size(); if(n 1) return head; if(n k) k 1; if(k - 1 n - k) return head; swap(tr[k-1], tr[n-k]); if(k - 2 0) tr[k-2]-next tr[k-1]; if(k n) tr[k-1]-next tr[k]; else tr[k-1]-next nullptr; tr[n-k-1]-next tr[n-k]; if(n-k1 n) tr[n-k]-next tr[n-k1]; else tr[n-k]-next nullptr; return tr[0]; } };