标题:一道简单的链表题目,为什么总是 runtime error !
只看楼主
sccer
Rank: 2
等 级:论坛游民
威 望:1
帖 子:15
专家分:14
注 册:2011-8-7
结帖率:33.33%
已结贴  问题点数:10 回复次数:3 
一道简单的链表题目,为什么总是 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;
    }
};
搜索更多相关主题的帖子: 不胜感激 百度 public 
2014-11-24 18:04
xufan
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:232
专家分:804
注 册:2008-10-20
得分:10 
按照你的说法, 好像是快速排序吧!

~~~~~~我的明天我知道~~~。
2014-11-25 16:40
sccer
Rank: 2
等 级:论坛游民
威 望:1
帖 子:15
专家分:14
注 册:2011-8-7
得分:0 
回复 2 楼 xufan
不算是快速排序吧,就是先顺序找到第一个大于等于x的数,然后把这个数之后小于x的数依次插到它前一位置。只是把链表分成了两部分,前半部分小于x,后半部分大于等于x,其余顺序不变。
2014-11-25 20:46
sccer
Rank: 2
等 级:论坛游民
威 望:1
帖 子:15
专家分:14
注 册:2011-8-7
得分:0 
没人么~
2014-12-01 10:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-439092-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.280364 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved