leetcode第143题 重排列表描述为
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
其中里面一个答案如下所示,
class Solution {
public:
void reorderList(ListNode* head) {
vector<ListNode*> vList;
auto p=head;
while§
{
vList.push_back§;
p=p->next;
}
int i=0;int j=vList.size()-1;
ListNode *p2=new ListNode(0);
p=p2;
while(i<=j)
{
p->next=vList[i++];
p=p->next;
if(i<=j)
{
p->next=vList[j–];
p=p->next;
}
}
p->next=NULL;
// head=p;
}
};
我想请问的是 函数处理过程中,对节点有一段重新赋值,即 p=p2,p2为一个新建节点;。那这边即使对p进行处理后,如果不执行 head=p 那这边返回的head岂不是没有变化?因为你的处理都交给节点p了 而节点p到最后野没有将其赋值给head节点。