题意:
给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。
注意是节点的编号而非节点的数值。
方法:
模拟
思路:直接模拟。
第一次遍历链表,新建奇数位节点,加入新链表;第二次遍历链表,新建偶数位节点,加入新链表;最后,返回新链表即可。
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;//返回新链表 } };
时间复杂度:空间复杂度: