// 程序员面试100题(算法)之反转单链表
#include "stdafx.h"
#include <iostream>
using namespace std;
struct LinkNode
{
int value;
LinkNode *next;
};
LinkNode *CreateLink(LinkNode *headNode, int &length)
{
int data = 0;
LinkNode *previous, *post;
if(NULL == headNode)
{
cin >> data;
if(-1 == data)
return NULL;
headNode = (LinkNode*)malloc(sizeof(LinkNode));
if(headNode)
{
headNode->value = data;
headNode->next = NULL;
length++;
}
else
{
cout << "No space" <<endl;
}
}
previous = post = headNode;
cin >> data;
while(data != -1)
{
post = (LinkNode*)malloc(sizeof(LinkNode));
if(post)
{
post->value = data;
post->next = NULL;
previous->next = post;
previous = post;
length++;
}
else
{
cout << "No space" << endl;
}
cin >> data;
}
return headNode;
}
void PrintLink(LinkNode *headNode)
{
if(headNode == NULL)
{
cout << "Linklist is empty" <<endl;
return;
}
LinkNode *p = headNode;
while(p)
{
cout << p->value << " ";
p = p->next;
}
cout << endl;
}
LinkNode *ReverseLink(LinkNode *headNode)
{
if(NULL == headNode)
return NULL;
if(NULL == headNode->next)
return headNode;
LinkNode *previous, *post, *r;
previous = headNode;
post = headNode->next;
while(post != NULL)
{
r = post->next;
post->next = previous;
previous = post;
post = r;
}
headNode->next = NULL;
return previous;
}
int _tmain(int argc, _TCHAR* argv[])
{
int length = 0;
LinkNode *headNode = NULL;
cout << "Create a linklist(end up with -1)" <<endl;
headNode = CreateLink(headNode, length);
PrintLink(headNode);
headNode = ReverseLink(headNode);
PrintLink(headNode);
return 0;
}
分享到:
相关推荐
文档包括带表头单链表的实现,双链表的操作,双链表的冒泡排序,不带表头的单链表,双向链表、链表节点的排序
设计一个单向链表的类模板
操作包括: 1. 在头部添加结点 2. 在尾部添加结点 3. 遍历 4. 逆置 5. 删除
c++实现单链表与双链表的基本操作,包含建立,插入,删除,遍历等。
本程序实现了单链表和双向链表的一些基本操作,包括建表,插入,删除等,对学习数据结构的人会有帮助!!!
用单链表和双向链表实现的航空订票系统,欢迎各位下载。
c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,
C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表
单链表实现双向循环链表单向链表存在一个弊端就是,当需要获取某个结点p的前驱时,需要从头指针开始遍历链表,获得“前驱”的执行时间为O(n),为了克服单向链表的这种缺点,可以利用双向链表。在双向链表中有两个...
C#单向链表的实现的源码
实现了一个简单的java版本的单链表,链表反转和链表是否相交如果相交求相交节点。关于链表是否相交是一次阿里的面试的在线试题,挂的很彻底。然后就在网上找了几个实现思路自己用java做了一个简单的实现....
创建链表,插入元素,删除元素,找元素位置,知道位置求值等,绝对好用
一个java实例,用来描述java算法中链表的使用。
1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)...利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。
c语言实现的单链表和循环链表,没有用到任何的库,直接内存分配创建链表节点和删除链表节点
程序员面试 100题 前60题 里面的内容主要是 数据结构方面 : 数组 链表 二叉树
遍历单链表如打印、修改 8 插入操作 9 删除操作 10 双向链表 11 双向链表的简介以及概念 11 双向链表的结点设计 11 双向链表的插入操作 13 双向链表的删除操作 14 双向链表的遍历 15 循环链表 16 循环链表概念 16 ...
这个资料实现的是循环单链表-双链表,为初学者提供源码
由第三方作者花费大量时间收集并整理散落在茫茫网络中的面经,并从中精选出若干具有代表性的技术类的面试题展开讨论,希望能给读者带来一些启发 例如; 把二元查找树转变成排序的双向链表 设计包含min函数的栈 把...
面试题23:计算学生不及格的人数打印他们的性别、姓名和成绩 面试题24:结构体内存对齐问题 3.6 C和C++的区别 面试题25:关键字static在C和C++中的区别 面试题26:C语言的结构体和C++的有什么区别 面试题27:C中的...