单链表反转

来源:互联网 发布:大思英语网络课程转让 编辑:程序博客网 时间:2024/04/29 20:07

挺简单的经典题, 自己写的第一个版本,变量初始化是这么做的,pPrevs = pHead, pCurrent = pHead->next, 看着也觉得怪怪的。 最后review的时候, 发现这样不会把反转前第一个节点的next置空!!!!!


修正版本:

#include "stdafx.h"#include <iostream>using namespace std;struct ListNode{int data;ListNode * pNext;};ListNode * ListInit(int num){ListNode *pNode = NULL;ListNode *pHead = new ListNode;pHead ->data = num;pHead ->pNext = NULL;ListNode *pPrevs = pHead;while (num--){pNode = new ListNode;pPrevs ->pNext = pNode;pNode ->data = num;pNode ->pNext = NULL;pPrevs = pNode;}return pHead;}ListNode * ReverseIteratively(ListNode * pHead){ListNode * pOverHead = NULL;ListNode * pPrevs = NULL;ListNode * pCurrent = pHead;ListNode * pNext = NULL;while (pCurrent != NULL){pNext = pCurrent ->pNext;pCurrent ->pNext = pPrevs;pPrevs = pCurrent;pCurrent = pNext;}pOverHead = pPrevs;return pOverHead;}int main(){ListNode *pHead  = ListInit(6);ListNode *pNewHead = NULL;ListNode *pNode = pHead;while (pNode){printf("%d  ", pNode->data);pNode = pNode ->pNext;}printf("\n");pNewHead = ReverseIteratively(pHead);pNode = pNewHead;while (pNode){printf("%d  ", pNode->data);pNode = pNode ->pNext;}printf("\n");}






0 0
原创粉丝点击