NC186. 两两交换链表的节点
描述
示例1
输入:
{1,2,3,4}
输出:
{2,1,4,3}
示例2
输入:
{1,2,3}
输出:
{2,1,3}
C++ 解法, 执行用时: 2ms, 内存消耗: 408KB, 提交时间: 2021-12-27
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* swapLinkedPair(ListNode* head) { // write code here if (!head || !head->next) return head; ListNode* tmp = head->next->next; ListNode* pre = head; ListNode* bef = head->next; ListNode* cur = nullptr; ListNode* res = nullptr; bef->next = pre; pre->next = tmp; cur = pre; pre = tmp; res = bef; if (!pre) return res; bef = tmp->next; while (bef) { tmp = bef->next; cur->next = bef; bef->next = pre; cur = pre; pre = tmp; if (!tmp) break; bef = tmp->next; } cur->next = pre; return res; } };
C 解法, 执行用时: 3ms, 内存消耗: 308KB, 提交时间: 2022-06-30
/** * struct ListNode { * int val; * struct ListNode *next; * }; * * C语言声明定义全局变量请加上static,防止重复定义 */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ struct ListNode* swapLinkedPair(struct ListNode* head ) { // write code here if(head==NULL||head->next==NULL) return head; struct ListNode* p=head->next; struct ListNode* r=p->next; p->next=head; head->next=swapLinkedPair(r); head=p; return head; }
C++ 解法, 执行用时: 3ms, 内存消耗: 320KB, 提交时间: 2022-06-30
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* swapLinkedPair(ListNode* head) { // write code here if(head==nullptr||head->next==nullptr) return head; ListNode* tail=head->next->next; ListNode* new_head=head->next; new_head->next=head; head->next=swapLinkedPair(tail); return new_head; } };
C 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-01-25
/** * struct ListNode { * int val; * struct ListNode *next; * }; * * C语言声明定义全局变量请加上static,防止重复定义 */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ struct ListNode* swapLinkedPair(struct ListNode* head ) { // write code here if(!head || !head->next) return head; struct ListNode *cur, *n, *temp, *pre_cur, *new; new = n = head->next; pre_cur = cur = head; temp = NULL; while(cur && n) { temp = n->next;//get the next tow first pre_cur->next = n;//make pre_cur point to next two second n->next = cur;//exchange cur->next = temp;//exchange pre_cur = cur;//back cur to pre_cur,make it be real cur = temp;//change cur to next two first if(!cur || !cur->next) break; n = cur->next;//get next two second } return new; }
C++ 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2021-11-29
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* swapLinkedPair(ListNode* head) { // write code here ListNode guard(0); guard.next=head; ListNode* prev=&guard; while(head) { head=head->next; if(head) { prev->next->next=head->next; head->next=prev->next; prev->next=head; prev=head->next; head=prev->next; } } return guard.next; } };