目前最快得方法,首先讲解一下思路。
双指针,一个记录头节点,一个记录头的下一个,观察输出结果,可以看出是奇数位置的链表拼接偶数位置的链表,可以就此构建对称的结构,互相传递到链表尾部,然后进行一次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; }
};