单链表逆转,用三个指针实现,但是在链表为空时,显示段错误,为什么,该怎么改呢?

单链表逆转,用三个指针实现,但是在链表为空时,显示段错误,为什么,该怎么改呢?

struct ListNode *reverse( struct ListNode *head )
{
    struct ListNode *p ,*q, *h;
    h=head;
    q=p=head->next;
    h->next=NULL;
    if(head!=NULL)
    {
    while(p != NULL) {
        q=q->next;
        p->next = h;
        h=p;
        p = q;
    }
    return h;
    }
    else
        return head;
}
 

img

你的代码第 5 行,head 为NULL了,能那么引用?

struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode* prev = NULL;
    struct ListNode* curr = head;
    struct ListNode* next = NULL;
    while (curr != NULL) {
        next = curr->next;
        curr->next = prev;
        prev = curr;
        curr = next;
    }
    return prev;
}

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633