创建一个简单的单向链表并将其倒序输出
2013-09-27 09:23
127 查看
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct link
{
int data;
struct link *next;
}LINK;
//这里要用二级指针,才能返回改变后的值,要谨记。
//返回一级指针时,并没有改变该地址值,只是改变了该地址里的内容。
void init_link(LINK **qlink)
{
*qlink = (LINK*)malloc(sizeof(LINK));
(*qlink)->data;
(*qlink)->next = NULL;
}
void insert(LINK *qlink, int i, int data)
{
int pos=1;
LINK *s,*q,*p;
q = qlink;
s = (LINK*)malloc(sizeof(LINK));
s->data = data;
while(pos <= i)
{
//找到要插入的位置
p = q;
q = q->next;
pos++;
}
s->next = p->next;
p->next =s;
}
void display(LINK *qlink)
{
LINK *p;
p = qlink->next;
while(p)
{
cout<<p->data<<"-->";
p = p->next;
}
}
void reverse(LINK *qlink)
{
LINK *p,*q;
//指向第一个结点,不是头结点
p = qlink->next;
//断开头结点与链表
qlink->next = NULL;
while(p)
{
q = p;
p = p->next;
q->next = qlink->next;
qlink->next = q;
}
}
void destroy(LINK *plink)
{
free(plink);
}
int main(void)
{
LINK *qlink;
//初始化链表
init_link(&qlink);
//往链表新增结点
insert(qlink, 1, 4);
insert(qlink, 2, 3);
insert(qlink, 3, 6);
insert(qlink, 4, 2);
//显示链表
display(qlink);
//将链表逆置
reverse(qlink);
cout<<endl;
display(qlink);
//释放内存空间
destroy(qlink);
return 0;
}
#include <stdlib.h>
using namespace std;
typedef struct link
{
int data;
struct link *next;
}LINK;
//这里要用二级指针,才能返回改变后的值,要谨记。
//返回一级指针时,并没有改变该地址值,只是改变了该地址里的内容。
void init_link(LINK **qlink)
{
*qlink = (LINK*)malloc(sizeof(LINK));
(*qlink)->data;
(*qlink)->next = NULL;
}
void insert(LINK *qlink, int i, int data)
{
int pos=1;
LINK *s,*q,*p;
q = qlink;
s = (LINK*)malloc(sizeof(LINK));
s->data = data;
while(pos <= i)
{
//找到要插入的位置
p = q;
q = q->next;
pos++;
}
s->next = p->next;
p->next =s;
}
void display(LINK *qlink)
{
LINK *p;
p = qlink->next;
while(p)
{
cout<<p->data<<"-->";
p = p->next;
}
}
void reverse(LINK *qlink)
{
LINK *p,*q;
//指向第一个结点,不是头结点
p = qlink->next;
//断开头结点与链表
qlink->next = NULL;
while(p)
{
q = p;
p = p->next;
q->next = qlink->next;
qlink->next = q;
}
}
void destroy(LINK *plink)
{
free(plink);
}
int main(void)
{
LINK *qlink;
//初始化链表
init_link(&qlink);
//往链表新增结点
insert(qlink, 1, 4);
insert(qlink, 2, 3);
insert(qlink, 3, 6);
insert(qlink, 4, 2);
//显示链表
display(qlink);
//将链表逆置
reverse(qlink);
cout<<endl;
display(qlink);
//释放内存空间
destroy(qlink);
return 0;
}
相关文章推荐
- 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针
- 输出一个单向链表的中间节点
- 输出一个单向链表中间的结点
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- 单向链表的创建、节点删除、链表输出、翻转(写法参考计蒜客数据结构课程)
- 含头结点的C++尾插法创建简单链表并输出
- 建立一个带头结点的的单向链表并输出到out53.dat和屏幕上。各节点的值为对应的下表。链表的节点数及输出地文件名作为参数传入
- 输入一个单向链表,输出该链表中倒数第k个结点
- 利用类对象为节点创建简单单向链表
- 输入一个单向链表,输出该链表中倒数第k个结点
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- C语言-------实现一个简单的单向链表
- 输入一个单向链表,输出该链表中倒数第k个结点
- 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- 手动实现单向链表跟双向链表的一个简单demo
- 输出一个单向链表中间的结点
- 13输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- 11. 微软面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 微软算法100道题------输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针