题目描述
思路:利用3个指针,一个指向当前节点,一个指向前一个节点,一个指向后一个节点。那么就地反转,就是将当前节点的next指向pre,然后将当前节点设置为前一个节点,让当前节点指向后一个节点(这是为下一轮做准备)。
代码:
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { //头插法实现 ListNode *pre=NULL,*pnext=NULL; while(pHead!=NULL){ pnext=pHead->next; //pnext指向下一个节点 pHead->next=pre; //当前指针的next应该指向前一个节点 pre=pHead; //pre指向当前节点,为下一轮做准备 pHead=pnext; //pHead指向下一个节点,为下一轮做准备 } return pre; } };