思路:
题目要求位置索引为奇数的排在位置索引为偶数的结点前面,想到维护两个链表,一个存放奇索引结点一个存放偶索引结点,循环遍历,最后把奇结点尾部链接到偶结点头部即可。
tips:
循环条件必须判空,否则报错野指针(已经犯了很多次这个错误),而且不能只写even->next,必须even也判空!!!
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(!head||!head->next) return head;
ListNode*odd=head,*evenhead=odd->next,*even=evenhead;
while(even&&even->next){//注意判空!
odd->next=even->next;
odd=odd->next;
even->next=odd->next;
even=even->next;
}
odd->next=evenhead;//奇偶链表链接
return head;
}
};