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; } };