C语言反转单链表
来源:互联网 发布:ubuntu ppa是什么 编辑:程序博客网 时间:2024/05/16 07:04
反转单链表
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:
struct node
{
int val;
struct node *pNext;
};
#include <stdio.h>#include <stdlib.h>struct node{ int val; struct node *pNext;};struct node *gen(){ struct node *pHead = NULL; for(int i = 10; i > 0; i--){ struct node * p = (struct node *)malloc(sizeof(struct node)); p -> val = i; p -> pNext = pHead; pHead = p; } return pHead;}void display(struct node *pHead){ while( pHead != NULL) { printf("%d ", pHead->val); pHead = pHead->pNext; } printf("\n");}//递归实现struct node * reverse(struct node *pHead){ if (pHead == NULL || pHead -> pNext == NULL) { return pHead; } struct node *p = pHead -> pNext; struct node *pNewHead = reverse(p); p -> pNext = pHead; pHead ->pNext = NULL; return pNewHead;}//尾递归实现struct node * do_reverse_tail(struct node *pHead, struct node *pNewHead){ if(pHead == NULL) { return pNewHead; } else { struct node *pNext = pHead->pNext; pHead->pNext = pNewHead; return do_reverse_tail(pNext, pHead); }}struct node * reverse_tail(struct node *pHead){ return do_reverse_tail(pHead, NULL);}//迭代实现struct node * reverse_it(struct node *pHead){ struct node *pNewHead = NULL; struct node *pPrev = NULL; struct node *pCur = pHead; while(pCur != NULL) { struct node *pTmp = pCur->pNext; if(pTmp == NULL) { pNewHead = pCur; } pCur->pNext = pPrev; pPrev = pCur; pCur = pTmp; } return pNewHead;}int main(){ struct node *pHead = gen(); display(pHead); pHead = reverse_it(pHead); display(pHead);}
5 0
- C语言反转单链表
- C语言反转单链表
- 单链表反转C语言实现
- 单链表反转C语言实现
- 单链表反转C语言实现
- C语言:单链表的反转
- C语言:【单链表】逆置反转单链表
- 逆置/反转单链表(C语言)
- C语言字符串反转
- 字符串反转(C语言)
- C语言字符串反转
- C语言字符串反转
- C语言中链表的反转
- C语言字符串反转函数
- C语言字符串反转函数
- C语言字符位反转
- C语言字符串反转函数
- C语言字符串反转函数
- equals || == 小结
- TCP、UDP协议详解
- sigprocmask 阻塞进程
- SSH框架搭建过程---之Hibernate框架的使用(1)
- 7-22 AI
- C语言反转单链表
- jquery.uploadify.v2.1.4实现图片切割上传
- andriod socket开发问题小结
- 2014Esri全球用户大会之Mobile & Apps
- Eclipse 使用maven创建Dynamic Web Project
- ACM ZOJ Problem Set - 1002 fire net
- 爱心
- 正则表达式--规则
- Mac上编译boost