【链表】非递归过程以O(N)反转单链表
2017-08-24 11:29
267 查看
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct Node;
typedef Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
struct Node
{
int val;
Position Next;
};
void Insert(int val, List list, Position pos)
{
Node *p;
p = (Node *)malloc(sizeof(Node));
p->val = val;
p->Next=NULL;
pos->Next = p;
}
//数据结构与算法分析 习题3.12
List ReverseList(List L) {
Position CurrentPos, NextPos, PreviousPos;
PreviousPos = NULL;
CurrentPos = L; NextPos = L->Next;
while (NextPos != NULL) {
CurrentPos->Next = PreviousPos;
PreviousPos = CurrentPos;
CurrentPos = NextPos;
NextPos = NextPos->Next;
}
CurrentPos->Next = PreviousPos;
return CurrentPos;
}
void main()
{
List list, p;
Position pos,l;
p = (Node *)malloc(sizeof(Node));
pos = p;
for (int i = 1; i <= 10; i++) {
Insert(i, p, pos);
pos = pos->Next;
}
l = p->Next;
while (l) {
printf("%d ", l->val);
l = l->Next;
}
printf("\n");
list = p->Next;
list = ReverseList(list);
l = list;
while (l) {
printf("%d ", l->val);
l = l->Next;
}
getchar();
}
#include <stdio.h>
#include <stdlib.h>
struct Node;
typedef Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
struct Node
{
int val;
Position Next;
};
void Insert(int val, List list, Position pos)
{
Node *p;
p = (Node *)malloc(sizeof(Node));
p->val = val;
p->Next=NULL;
pos->Next = p;
}
//数据结构与算法分析 习题3.12
List ReverseList(List L) {
Position CurrentPos, NextPos, PreviousPos;
PreviousPos = NULL;
CurrentPos = L; NextPos = L->Next;
while (NextPos != NULL) {
CurrentPos->Next = PreviousPos;
PreviousPos = CurrentPos;
CurrentPos = NextPos;
NextPos = NextPos->Next;
}
CurrentPos->Next = PreviousPos;
return CurrentPos;
}
void main()
{
List list, p;
Position pos,l;
p = (Node *)malloc(sizeof(Node));
pos = p;
for (int i = 1; i <= 10; i++) {
Insert(i, p, pos);
pos = pos->Next;
}
l = p->Next;
while (l) {
printf("%d ", l->val);
l = l->Next;
}
printf("\n");
list = p->Next;
list = ReverseList(list);
l = list;
while (l) {
printf("%d ", l->val);
l = l->Next;
}
getchar();
}
相关文章推荐
- 使用非递归过程以O(N)时间反转单链表 使用常数附加空间
- 单链表的反转(用循环和递归实现单链表反转)
- 【数据结构】单链表—从尾到头输出单链表 — 栈 / 递归
- 链表递归逆序输出和反转链表。
- 链表反转的递归和非递归
- 反转链表——递归实现
- Java中单链表的实现和单链表的反转(倒置)
- Java单双链表的创建、反转与递归反转
- 递归方法反转单向链表(C/C++)
- 实现链表的反转(递归方法与非递归方法)
- 反转链表:迭代和递归的实现
- 链表反转 递归和非递归版
- 【100题】反转链表(递归实现)
- 反转一个单链表,分别以迭代和递归的形式来实现
- 链表的建立与反转(递归反转和非递归反转)
- 如何使用递归和非递归方式反转单向链表
- 链表面试题-合并两个有序单链表(递归和非递归)
- 反转链表[递归,非递归]
- 【面试题】单链表反转-递归和非递归
- 写代码,反转一个单链表,分别以迭代和递归的形式来实现