链表反转不开辟新空间

来源:互联网 发布:js hide 编辑:程序博客网 时间:2024/05/22 00:23

看了很多都不全面,这里贴一个自己测试的完整例子,亲测有效

#include <iostream>using namespace std;struct ListNode{int value;ListNode * next;};ListNode * reverse(ListNode * list){if(list == NULL) {return NULL;}ListNode* pReversedHead = NULL;ListNode* pNode = list;ListNode* pPrev = NULL;while(pNode != NULL){// get the next node, and save it at pNextListNode* pNext = pNode->next;// if the next node is null, the currect is the end of original // list, and it's the head of the reversed listif(pNext == NULL){pReversedHead = pNode;}// reverse the linkage between nodespNode->next = pPrev;// move forward on the the listpPrev = pNode;pNode = pNext;}return pReversedHead;}int main(){ListNode * p0 = new ListNode;p0->value = 1;//p0->next = NULL;ListNode * p1 = new ListNode;p1->value = 2;p0->next = p1;//p1->next = NULL;ListNode * p2 = new ListNode;p2->value = 3;p1->next = p2;ListNode * p3 = new ListNode;p3->value = 4;p2->next = p3;p3->next = NULL;ListNode * local = p0;while(local!=NULL){cout << local->value << endl;local = local->next;}//链表反转 ListNode * p4 = reverse(p0);cout << "--------" << endl;while(p4!=NULL){cout << p4->value << endl;p4 = p4->next;}return 0;}


0 0
原创粉丝点击