019-翻转列表

来源:互联网 发布:淘宝网连衣裙2016长袖 编辑:程序博客网 时间:2024/05/17 07:15
// 019.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <malloc.h>struct ListNode{intm_nKey;struct ListNode *m_pNext;};struct ListNode *CreatList(int number){struct ListNode *head = NULL;struct ListNode *cur  = NULL;struct ListNode *temp = NULL;head = (struct ListNode*)malloc(sizeof(struct ListNode));if (NULL == head){return NULL;}head->m_nKey = 0;head->m_pNext = NULL;temp = head;printf("List data number %d\n", number);for (int i=0; i<number; i++){cur = (struct ListNode*)malloc(sizeof(struct ListNode));if (cur == NULL){return NULL;}printf("List Id%02d ", i);printf("Input data  ");scanf("%d", &cur->m_nKey);cur->m_pNext = NULL;if (i==0){head = cur;temp = cur;}else{cur->m_pNext = NULL;temp->m_pNext = cur;}temp = cur;}return head;}//反转列表节点//思路 在某一链表中存在 【pPrev】【pNode】【pNext】//反转时pNode节点时,必须得保存其下一个节点,//否则出现断链(因为pNode得m_pNext得指向pPrev)struct ListNode* Reverse(struct ListNode* pHead){if (NULL == pHead){return NULL;}struct ListNode *pPrev = NULL;struct ListNode *pNode = pHead;struct ListNode *pNext = NULL;struct ListNode *pReverseHead = NULL;while(pNode != NULL){pNext = pNode->m_pNext;//保留当前遍历到节点的下一个节点if (pNext == NULL){pReverseHead = pNode;//当前节点即尾节点 }pNode->m_pNext = pPrev;//翻转节点//节点关系向右边递进pPrev = pNode;pNode = pNext;}return pReverseHead;}bool PrintList(struct ListNode* pHead){if (NULL == pHead){return false;}int i=0;struct ListNode* pTemp = pHead;do {++i;printf("List number: %d  Data:%d\n",i, pTemp->m_nKey);pTemp = pTemp->m_pNext;//pTemp指向下一个节点的指针} while (pTemp != NULL);//最后一个节点的指针元素为NULLreturn true;}//题目翻转链表int main(int argc, char* argv[]){//printf("Hello World!\n");struct ListNode *pHead = NULL;pHead = CreatList(5);pHead = Reverse(pHead);PrintList(pHead);return 0;}

 
原创粉丝点击