题意:
给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。
注意是节点的编号而非节点的数值。
方法:
模拟
思路:直接模拟。
第一次遍历链表,新建奇数位节点,加入新链表;第二次遍历链表,新建偶数位节点,加入新链表;最后,返回新链表即可。
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(head==nullptr)
return head;
ListNode *h=nullptr,*tail,*p,*q;//新建链表
p=head;//初始化
while(p){//遍历并新建奇数位节点,加入新链表
q=new ListNode(p->val);
if(h==nullptr){//尾插法
h=q;
}else{
tail->next=q;
}
tail=q;
if(p->next)
p=p->next->next;
else
break;
}
p=head->next;
while(p){//遍历并新建偶数位节点,加入新链表
q=new ListNode(p->val);
tail->next=q;
tail=q;
if(p->next)
p=p->next->next;
else
break;
}
return h;//返回新链表
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号