双链表和单链表性质相似只是在多加了一个前指针

1.定义结构体

typedef struct Node{
int data;
struct Node *prior;
struct Node *next;
}Node,*LinkedList;

2.比单链表一个指向

LNew->data = i;
L->next = LNew;
LNew->prior = L; // 比单链表多这一条
LNew->next = NULL;
L = LNew;

具体实现demo.c

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h> typedef struct Node{
int data;
struct Node *prior;
struct Node *next;
}Node,*LinkedList; LinkedList LinkedListInt(){
Node *Head,*L,*LNew;
int i;
Head = (Node *)malloc(sizeof(Node));
if(Head == NULL){
printf("申请空间失败\n");
exit(-);
} L = Head;
L->next = NULL; for(i=;i<;i++){
LNew = (Node *)malloc(sizeof(Node));
if(LNew == NULL){
printf("申请空间失败\n");
exit(-);
} LNew->data = i;
L->next = LNew;
LNew->prior = L;
LNew->next = NULL;
L = LNew;
} return Head;
} int main(int argc, char const *argv[]) {
/* code */
Node *p;
int i;
p = LinkedListInt();
p = p->next;
// 让p的前指针指向p,这样第一个有值元素就有前指针
p->prior = p; while(p != NULL){
//printf("%d,",p->prior->data);
printf("%d ",p->data);
//printf("%d ",p->next->data);
// 防止p指空报错
if(p->next != NULL){
p = p->next;
}else{
break;
}
} printf("\n");
// 测试指针能不能指回去
p = p->prior;
printf("%d ",p->data);
printf("\n"); return ;
}

最新文章

  1. [无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!!
  2. FileSaver.js ////////////////////zzzzzzzzzzzzzz
  3. JQuery初体验
  4. Python标准库——走马观花
  5. EJB究竟是什么,真的那么神奇吗??
  6. Python练习题 026:求100以内的素数
  7. 转:java提取图片中的像素
  8. R语言和大数据
  9. 初学ios遇到问题记录01
  10. jquery插件tab——小试牛刀
  11. .NET基础——循环、枚举
  12. Dynamics CRM 相关资料
  13. 快速进入pycharm图形界面
  14. Lua 迭代器
  15. boost 随机数发生器
  16. TopCoder SRM502 Div1 500 贪心 01背包
  17. 263A
  18. JavaScript学习笔记之call和apply
  19. BZOJ 2879 [Noi2012]美食节 | 费用流 动态开点
  20. Solidworks机构运动仿真

热门文章

  1. Virtex6 PCIe 超简版基础概念学习(二)
  2. poj1936
  3. mount -o remount,rw / (这是个求命的命令)
  4. struts2设置加载非默认路径的struts.xml文件解决方案
  5. 使用 ChromaKey 滤镜进行抠图
  6. 在windows中使用Navicat连接Linux虚拟机中的mysql数据库
  7. Spider Studio 新版本 (x-mas) - 可以引入第三方程序集, 可以将脚本生成为DLL
  8. pip和 easy_insall的区别
  9. C++ 运算符重载二(一元运算符重载)
  10. 人脸验证算法Joint Bayesian详解及实现(Matlab)