题目考察的知识点:与链表有关的题基本都是插入,删除,交换顺序等,解决这些问题通常将链表的指针进行修改。
题目分析:这道题常规操作就是定义两个头结点,一个头插0结点,另一个头插1节点,然后将两个链表连接起来;也可以定义一个头结点,记录第一个0结点插入的位置,在头结点后面插0结点,在第一个0结点后插1结点,两种思路大致一样。
本题解析所用的编程语言:c++
ListNode* sortCowsIV(ListNode* head)
{
// write code here
ListNode newhead(-1);
newhead.next = nullptr;
ListNode* end = &newhead; //记录第一个0结点插入的位置
int i = 1;
ListNode* cur = head;
while (cur)
{
ListNode* next = cur->next;
if (cur->val == 0)
{
cur->next = newhead.next;
newhead.next = cur;
if (i) //记录第一次0的位置
{
end = cur;
--i;
}
}
else
{
cur->next = end->next;
end->next = cur;
}
}
return newhead.next;
}

京公网安备 11010502036488号