C语言实现双链表(带头节点)

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

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(-1);
  }

  L = Head;
  L->next = NULL;

  for(i=0;i<5;i++){
    LNew = (Node *)malloc(sizeof(Node));
    if(LNew == NULL){
      printf("申请空间失败\n");
      exit(-1);
    }

    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 0;
}

 

转载于:https://www.cnblogs.com/xiaomingzaixian/p/9396045.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值