挑战面试编程:链表逆转的多种实现
2014-10-23 23:09
225 查看
挑战面试编程:链表逆转的多种实现
链表的逆转是一种常见又较复杂的操作,下面使用多种方式进行实现:while、递归以及goto。
代码:
所有内容的目录
CCPP Blog 目录
链表的逆转是一种常见又较复杂的操作,下面使用多种方式进行实现:while、递归以及goto。
代码:
#include <stdio.h> #include <stdlib.h> //链表节点 typedef struct node { int data; struct node *next; }Node; //逆转的while实现 void rev(Node **list) //链表逆转 { if (*list == NULL || (*list)->next == NULL) //空或者只有一个节点 { return; } else { Node *pPre, *pCur, *pNext; pPre = *list; pCur = (*list)->next; while (pCur) { pNext = pCur->next; pCur->next = pPre; pPre = pCur; pCur = pNext; } (*list)->next = NULL; *list = pPre; } } //逆转的递归实现 void rev_r(Node **list, Node *pCur, Node *pNext) { if (pCur == NULL || pNext == NULL) { (*list)->next = NULL; *list = pCur; return; } rev_r(list, pNext, pNext->next); pNext->next = pCur; } //逆转的goto实现 void rev_goto(Node **list) { if (*list == NULL || (*list)->next == NULL) return; else { Node *pPre = *list; Node *pCur = (*list)->next; Node *pNext = NULL; stage: pNext = pCur->next; pCur->next = pPre; pPre = pCur; pCur = pNext; if (pCur) goto stage; (*list)->next = NULL; *list = pPre; } } void print(Node *list) { if (list == NULL) return; printf("%4d", list->data); print(list->next); } void main() { Node p1 = { 1, NULL }; Node p2 = { 2, &p1 }; Node p3 = { 3, &p2 }; Node p4 = { 4, &p3 }; Node p5 = { 5, &p4 }; Node p6 = { 6, &p5 }; Node *list = &p6; printf("原链表\n"); print(list); printf("\n"); printf("逆转\n"); //rev(&list); //while //rev_r(&list, list, list->next); //递归 rev_goto(&list); //goto print(list); printf("\n"); system("pause"); }运行
所有内容的目录
CCPP Blog 目录
相关文章推荐
- 挑战面试编程:链表逆转的多种实现
- Java语言中链表和双向链表的实现-Java基础-Java-编程开发
- 逆转链表的实现
- 多种数制显示的汇编语言编程实现
- 笔试面试常考数据结构-单链表常用操作编程实现
- Shell编程之实现一个BACnet设备的多种属性
- [面试] - 在单链表末尾添加一个节点 C++ 实现
- [面试] - 在单链表末尾添加一个节点 C++ 实现
- SMB的NTLM认证过程与NTLM挑战的编程实现
- 编程实现单链表和双链表的插入节点
- 软件工程师面试编程常见函数实现
- 经典面试编程题--atoi()实现
- 史上最牛编程入门图书震撼登场,30多小时的高品质视频讲座,提供多种技术的知名企业面试题库及面试指南等!!!
- OK~终于实现循环链表及链表逆转。可以睡了。
- SMB的NTLM认证过程与NTLM挑战的编程实现
- SMB的NTLM认证过程与NTLM挑战的编程实现
- 软件工程师面试编程常见函数实现
- C语言实现链表逆转
- 编程中常用的重要的数据结构实现(二)之链表
- 编程实现单链表和双链表删除节点