BM14. 链表的奇偶重排
描述
示例1
输入:
{1,2,3,4,5,6}
输出:
{1,3,5,2,4,6}
说明:
示例2
输入:
{1,4,6,3,7}
输出:
{1,6,7,4,3}
说明:
C++ 解法, 执行用时: 16ms, 内存消耗: 4680KB, 提交时间: 2021-05-26
static const auto io_sync_off =[]() { //解除流缓冲区 std::ios::sync_with_stdio(false); //解除cin与cout间的绑定 std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* oddEvenList(ListNode* head) { if(head==nullptr||head->next==nullptr) return head; ListNode* p1=head; ListNode* p2=head->next; ListNode* head2=p2; while(p2!=nullptr&&p2->next!=nullptr) { p1->next=p2->next; p1=p1->next; p2->next=p1->next; p2=p2->next; } p1->next=head2; return head; } };
C++ 解法, 执行用时: 17ms, 内存消耗: 4708KB, 提交时间: 2021-06-12
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* oddEvenList(ListNode* head) { if(head==NULL || head->next == NULL || head->next->next == NULL) return head; ListNode *evenHead = head->next; ListNode *oddHead = head; ListNode *evenNode = evenHead; ListNode *oddNode = oddHead; ListNode *tempEvenNode = evenHead->next->next; ListNode *tempOddNode = oddHead->next->next; while(oddNode->next->next != NULL && evenNode->next->next != NULL) { tempOddNode = oddNode; oddNode = oddNode->next->next; tempEvenNode = evenNode; evenNode = evenNode->next->next; tempOddNode->next = oddNode; tempEvenNode->next = evenNode; } if(oddNode->next->next==NULL) oddNode->next = evenHead; else { tempOddNode = oddNode; oddNode = oddNode->next->next; tempOddNode->next = oddNode; evenNode->next = NULL; oddNode->next = evenHead; } return oddHead; } }; class Solution1 { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* oddEvenList(ListNode* head) { if(head==NULL || head->next ==NULL) return head; ListNode *p1=head; ListNode *p2=head->next; ListNode *evenHead = p2; while(p2!=NULL && p2->next != NULL) { p1->next = p2->next; p1 = p1->next; p2->next = p1->next; p2 = p2->next; } p1->next = evenHead; return head; } }; static const auto io_sync_off =[]() { //解除流缓冲区 std::ios::sync_with_stdio(false); //解除cin与cout间的绑定 std::cin.tie(nullptr); return nullptr; }();
C++ 解法, 执行用时: 17ms, 内存消耗: 4732KB, 提交时间: 2021-12-21
static const auto io_sync_off =[]() { //解除流缓冲区 std::ios::sync_with_stdio(false); //解除cin与cout间的绑定 std::cin.tie(nullptr); return nullptr; }(); class Solution { public: ListNode* oddEvenList(ListNode* head) { // write code here if(head == nullptr) return nullptr; ListNode *ji=head,*ou=head->next,*tmp,*ouhead=head->next; while(ou){ tmp=ou->next; ji->next=tmp; if(tmp){ ou->next=tmp->next; ji=ji->next; ou=ou->next; } else{ break; } } ji->next=ouhead; return head; } };
C++ 解法, 执行用时: 17ms, 内存消耗: 4788KB, 提交时间: 2021-04-07
static const auto io_sync_off =[](){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); /** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param head ListNode类 * @return ListNode类 */ ListNode* oddEvenList(ListNode* head) { if (head==nullptr || head->next==nullptr) return head; ListNode* l=head, *r=head->next, *rhead = r; while(r != nullptr && r->next != nullptr) { l -> next = r -> next; l = l -> next; r->next = l -> next; r = r -> next; } l->next = rhead; return head; } };
C++ 解法, 执行用时: 17ms, 内存消耗: 4848KB, 提交时间: 2022-05-23
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* oddEvenList(ListNode* head) { if(head==nullptr) return head; ListNode* a=head; ListNode* b=head->next; ListNode* c=b; while(c&&c->next) { a->next=c->next; a=a->next; c->next=a->next; c=c->next; } a->next=b; return head; } };