思路:
首先既然不能改变值,那么只能尝试改变next指向,但我们这个时候要知道链表的单向性,如果尝试访问最后端点,则前面的值无法再访问,重启链表只会浪费时间。
因此想到要使用线性方式进行运算!
class Solution {
public:
void reorderList(ListNode *head) {
if(head==NULL || head->next==NULL||head->next->next==NULL){
return ;
}//特殊情况判定
vector<ListNode *> res;
ListNode* node = head;
while(node!=NULL){
res.push_back(node);//初始化
node=node->next;
}
int i;
int size=res.size();
for(i=0;i<size/2;i++){
res[i]->next =res[size-1-i];//改变指向
res[size-1-i]->next=res[i+1];
}
res[i]->next=nullptr;//最后一个点指向nullptr
}
};