最简单的双向环形链表

原创 2018年04月16日 16:00:39
// NewList.cpp : 定义控制台应用程序的入口点。
//

#include "string.h"
#include "stdlib.h"
#include <stdio.h>
// 链表节点
typedef struct _Node_
{
    int id;
    char name[256];
    _Node_ * pre;
    _Node_ * next;
}Node;
// 链表头信息
typedef struct _ListHead_
{
    int numNode;
    Node * pNode;

}ListHead;
// 尾插法
int tailInsterHeadList(ListHead * pListHead, Node * pNode)
{
    if (pListHead->pNode)
    {
        Node * p = NULL;
        for (p = pListHead->pNode; p->next != pListHead->pNode; p = p->next)
        {
        }
        pNode->pre = p;
        pNode->next = p->next;
        p->next = pNode;
        pListHead->pNode->pre = pNode;
    }
    else
    {
        pListHead->pNode = pNode;
        pNode->next = pNode;
        pNode->pre = pNode;
    }

    pListHead->numNode++;
    return 0;
}

int initHead(ListHead * pListHead)
{

    pListHead->numNode = 0;
    pListHead->pNode = NULL;
    return 0;
}
int main()
{
    ListHead * pListHead = (ListHead *)calloc(sizeof(ListHead), 1);
    char * pName[10] = { "a", "b", "c", "d", "e", "f","g","h", "i", "j" };
    for (int i = 0; i < 10; i++)
    {
        Node * pNode = (Node *)calloc(1, sizeof(Node));
        pNode->id = i;
        pNode->next = NULL;
        pNode->pre = NULL;

        memcpy(pNode->name, pName[i], sizeof(pName[i]));
        tailInsterHeadList(pListHead, pNode);
    }

    printf("顺序打印数据 \n");
    Node * p = NULL;
    for (p = pListHead->pNode; p->next != pListHead->pNode; p = p->next)
    {
        printf("%s \n", p->name);
    }
    printf("%s \n", p->name);

    printf("逆序打印数据 \n");
    for (p = pListHead->pNode->pre; p->pre != pListHead->pNode->pre; p = p->pre)
    {
        printf("%s \n", p->name);
    }
    printf("%s \n", p->name);
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_31872269/article/details/79961845

丢手帕问题的双向环形链表实现

问题:设编号为1、2……n的几个小孩围坐一圈,约定编号为k(1=         我们现在用一个双向环形链表来解这一问题。先来看看下面这幅图:       圆圈代表一个结点,红色的指针指向下一...
  • zhutulang
  • zhutulang
  • 2012-05-11 20:20:11
  • 3639

List环形双向链表

实现一个环形的双向链表,链表的每个节点都保存三个信息,当前节点的值value,前一个节点的指针prev,后一个节点的指针next。因为是环形的,所以最后一个节点的next指向第一个节点,而第一个节点的...
  • qq_32953481
  • qq_32953481
  • 2015-12-26 20:58:44
  • 883

内核链表实现分析与使用(双向环形链表)

内核链表实现分析与使用(双向环形链表) 内核对链表进行了封装。使用内核链表需要定义一个链表头,然后在需要管理的结构体中内嵌链表节点(通常又叫做链表入口entry) 链表的初始化 分为链表头的初始化...
  • TongxinV
  • TongxinV
  • 2017-03-02 22:43:09
  • 560

java 循环链表(实例)

此循环列表包括基本的增删改查
  • lv836735240
  • lv836735240
  • 2014-08-16 20:10:25
  • 3054

链表简单例子

package test;import java.util.*;public class Tiger9 { static class LinkedList {  private Node header...
  • ggjjzhzz
  • ggjjzhzz
  • 2005-03-16 17:21:00
  • 2020

C语言基础—数据结构之单向循环链表和双向循环链表

数据结构之单向循环链表和双向循环链表 对于很多初学者来说,最头疼的事情莫过于不知道如何下手,俗话说的好:万事开头难。写代码就是不断的仿照别人的代码,根据自己的思路加以理解,最后形成一种编程思想。编程...
  • sugar__26
  • sugar__26
  • 2017-09-20 12:46:52
  • 211

链表和红黑树测试代码

  • 2017年10月09日 16:32
  • 32KB
  • 下载

环形链表相关题目解析

环形链表也是近年来面试笔试中常考问题,于是就在网上整理了相关的题目与解析。 1.判断一个链表是不是环形链表 思路:这里给定两个指针,fast和slow。两个指针同时从头结点开始出发,fas...
  • happywq2009
  • happywq2009
  • 2015-03-16 21:05:09
  • 708

C——(单向、单向循环、双向、双向循环)链表学习总结

这段时间一边看书一边把链表的知识总结了一下,并且画了示意图来帮助理解。主要是单向链表,单向循环链表,双向链表,双向循环链表四个部分,每个部分都包括了初始化,创建,插入,删除的基本操作,并总结了各个操作...
  • baweiyaoji
  • baweiyaoji
  • 2017-07-25 14:59:53
  • 540

判断链表是否存在环形链表

如何解决链表中是否存在链表的问题: 设置两个指针p1, p2,每次p1向前走一步,p2向前走两步,直到p2碰到NULL或两个指针相等时结束循环。 如果两个指针相等,则说明该链表存在环。...
  • sh_frankie
  • sh_frankie
  • 2015-09-25 10:12:36
  • 1539
收藏助手
不良信息举报
您举报文章:最简单的双向环形链表
举报原因:
原因补充:

(最多只允许输入30个字)