328. 奇偶链表

tech2022-11-28  108

题目: 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

题解思路:

方法:穿针引线

引入一个r结点保存第一个偶数结点,待奇数结点指向结束就指向r结点。

函数代码:

class Solution { public: ListNode* oddEvenList(ListNode* head) { if(!head) { return head; } ListNode *p=head; ListNode *q=head->next; //保存第二个结点,等奇数结点遍历完就接着指向第一个偶数结点 ListNode *r=q; while(q&&q->next) { p->next=q->next; p=p->next; q->next=p->next; //也可以q=q->next; q=p->next; } p->next=r; return head; } };
最新回复(0)