c++面试题

来源:互联网 发布:良品铺子手撕面包 知乎 编辑:程序博客网 时间:2024/06/11 04:51

已知下面定义的结构,编写一个逆序链表元素的方法

struct T_DATA{int _data;struct T_DATA *pNext;T_DATA(int data){_data = data;pNext = NULL;}};struct T_DATA *head = NULL;// 该变量待会定义在main函数的开头

答案:

#include <stdio.h>#include <crtdbg.h>struct T_DATA{int _data;struct T_DATA *pNext;T_DATA(int data){_data = data;pNext = NULL;}};struct T_DATA *head = NULL;// 逆序链表元素的方法void reverse(struct T_DATA *&head){struct T_DATA *pCur = head, *pPrivious = NULL, *pNext = NULL;while (pCur){pNext = pCur->pNext;if (!pCur->pNext){pCur->pNext = pPrivious;break;}if (pCur == head){pCur->pNext = NULL;pPrivious = pCur;pCur = pNext;}else{pCur->pNext = pPrivious;pPrivious = pCur;pCur = pNext;}}head = pCur;}// 向链表中插入元素void insert(struct T_DATA *&previousNode, struct T_DATA *pNewNode){if (NULL == previousNode){previousNode = pNewNode;}else{previousNode->pNext = pNewNode;}}// 释放链表void release(struct T_DATA  *head){struct T_DATA *pTmp = head, *pNext = NULL;while (pTmp){pNext = pTmp->pNext;delete pTmp;pTmp = pNext;}}// 打印链表void print(struct T_DATA *head){T_DATA *pCur = head;while (pCur){printf("%d ", pCur->_data);pCur = pCur->pNext;}printf("\n");}int _tmain(int argc, _TCHAR* argv[]){struct T_DATA *head = NULL;T_DATA *pNode0 = new T_DATA(3);T_DATA *pNode1 = new T_DATA(1);T_DATA *pNode2 = new T_DATA(4);T_DATA *pNode3 = new T_DATA(6);T_DATA *pNode4 = new T_DATA(5);// 向链表中插入元素insert(head, pNode0);insert(pNode0, pNode1);insert(pNode1, pNode2);insert(pNode2, pNode3);insert(pNode3, pNode4);// 打印初始链表print(head);// 逆序链表元素reverse(head);// 打印逆序后的链表print(head);// 暂停程序getchar();// 释放链表release(head);// 捕获内存泄漏_CrtDumpMemoryLeaks();return 0;}


0 0
原创粉丝点击