一道简单的链表题目,为什么总是 runtime error !
题目是这样的,给一个链表和一个数x,将链表排成前半部分比x小,后半部分大于等于x,链表其他顺序保持不变,如1->4->3->2->5->2和x=3,结果是1->2->2->4->3->5我这个一直是runtime error……百度了一下说是 访问了未定义的内存,内存溢出之类云云。可是我找了一下午了没找到哪里错了,求助各位大神指导~
临表涕零,不胜感激
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *partition(ListNode *head, int x) {
ListNode *q=NULL; //指向小于x的分界点(第一个遇到的>=x的节点的前一节点
ListNode *h= (ListNode*)malloc(sizeof(ListNode)); //在原链表前加一个节点
ListNode *tempp,*tempq;
h->next=head;
ListNode *p=h;
while(p->next!=NULL){
if(q!=NULL&&(p->next->val<x)){ //确定q的位置后,之后的节点找小于x的往q后面接
tempp=p->next;
p->next=tempp->next;
tempq=q->next;
q->next=tempp;
tempp->next=tempq;
q=q->next;
}
if((p->next->val==x)||(p->next->val>x)&&q==NULL) //确定q的位置
q=p;
if(p->next!=NULL)
p=p->next;
}
return h->next;
}
};