具体题目就是将链表的第一个和最后一个连接,第二个和最后第二个连接,直到结束
解法也很简单,先对链表后半部分逆序,然后在从头开始将这个链表当作两个链表进行插入即可
class Solution {
public:
void reorderList(ListNode* head) {
if(!head || !head->next){return;}
int len = 0;
ListNode* ptr = head;
while(ptr){
len++;
ptr = ptr->next;
}
len = (len+1)/2;
ListNode* ptr1 = head;
ListNode* prev = nullptr;
while(len != 0){
prev = ptr1;
ptr1 = ptr1->next;
len--;
}
ListNode* s = reverseList(ptr1);
prev->next = nullptr;
ListNode* dummy = new ListNode(0,head);
while(head){
ListNode* n = head->next;
head->next = s;
if(s){
ListNode* s1 = s->next;
s->next = n;
s = s1;
}
head = n;
}
return;
}
ListNode* reverseList(ListNode* l1){
ListNode* prev = nullptr;
while(l1){
ListNode* next_node = l1->next;
l1->next = prev;
prev = l1;
l1 = next_node;
}
return prev;
}
};
```