目前最快得方法,首先讲解一下思路。
双指针,一个记录头节点,一个记录头的下一个,观察输出结果,可以看出是奇数位置的链表拼接偶数位置的链表,可以就此构建对称的结构,互相传递到链表尾部,然后进行一次l->next=rhead的拼接。
1。边界 : head||head->next==NULL
2.指针变量 ListNode* l,r,rhead;
分成两个链表,l和r,用rhead记录r头部
3.l->next = r->next; l=l->next;
r->next=l->next; r=r->next;
对称的一步一步走
由于r是靠后的链表,故循环条件用r表示
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;//记下r的头部
    while(r != nullptr && r->next != nullptr) {
        l -> next = r -> next;//让l->next在正确位置
        l = l -> next;//更新l
        r->next = l -> next;//让r->next在正确位置
        r =  r -> next;//更新r
    }
    l->next = rhead;
    return head;
}

};