NC78 反转链表

NC78 反转链表

反转链表这道题有多种解法,我用的是循环地把每个结点的next指针指向它的上一个元素,思路容易,但是一写就错。我们可以定一个pre指针,用来表示当前节点的前一个结点,用一个nxt指针表示当前节点的下一个节点。注意要把这两个指针初始化为NULL,防止野指针问题。

最后返回的指针应该是pre指针,如果返回pHead指针,由于此时pHead已经指向NULL,会导致返回的是空指针。

原理简单,不赘述,看代码:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if(pHead==NULL)return NULL;
        ListNode* pre=NULL;
        ListNode* nxt=NULL;
        while(pHead!=NULL){
            nxt=pHead->next;
            pHead->next=pre;
            pre=pHead;
            pHead=nxt;
        }
        return pre;
    }
};

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注