c语言用尾递归实现单向链表的逆向排列
2017-02-09 10:32
609 查看
c++的stl很好用,c语言的简单链表最近几年几乎不用了。最近一次笔试,遇到了这题,就十分捉急。当时想到似乎得用递归。现在算是完成了。
以下以简单的单向链表(链表头结点跟普通结点一致)为例。
以下以简单的单向链表(链表头结点跟普通结点一致)为例。
#include <stdlib.h> typedef struct Node { int i; struct Node *pNext; } Node; Node *createList(const int *datas, unsigned numOfData); Node *reverseList(Node *pList); int main() { int datas[4] = { 1, 3, 0, -78 }; Node *pList = createList(datas, sizeof(datas) / sizeof(int)); Node *pList2 = reverseList(pList); return 0; } Node *createList(const int *datas, unsigned numOfData) { Node *pTmp = NULL; Node *pLast = NULL; Node *pHead = NULL; const size_t sizeOfNode = sizeof(Node); pHead = (Node*)malloc(sizeOfNode); pHead->i = datas[0]; pLast = pHead; for (unsigned i = 1; i < numOfData; i++) { pTmp = (Node*)malloc(sizeOfNode); pTmp->i = datas[i]; pLast->pNext = pTmp; pLast = pTmp; } pLast->pNext = NULL; return pHead; } Node *reverseNode(Node *pCur, Node *pPre) { Node *pNext = pCur->pNext; pCur->pNext = pPre; if (pNext == NULL) { return pCur; } return reverseNode(pNext, pCur); } Node *reverseList(Node *pList) { return reverseNode(pList, NULL); }
相关文章推荐
- 带表头的单向链表实现(C语言)
- c语言单向链表的简单实现,隐藏head节点
- C语言实现单向链表
- C语言实现链表之单向链表(六)删除头结点
- C语言实现的单向链表
- C语言单向链表的实现
- C语言实现链表之单向链表(四)清空链表
- 单向链表基本操作(C语言实现)
- C语言实现一个简单的单向链表list
- C语言数据结构之单向链表(已经调试可以实现相应的功能了,可是还是有几个问题现在还是不大理解,希望大家能够一起探讨)
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
- C语言实现单向链表
- C语言实现链表之单向链表(二)结点内存申请及数据初始化
- list.c - A linked list by C --- C语言实现的单向链表
- 单向链表的C语言实现
- 自己实现C语言单向链表
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
- C语言实现链表之单向链表(三)创建链表
- C语言实现链表之单向链表(五)头结点前插入结点
- C语言实现链表之单向链表(一)头文件