美文网首页
双向循环链表

双向循环链表

作者: 徐凯_xp | 来源:发表于2021-05-06 14:44 被阅读0次

输入共有三行,第一行为该单向循环链表的长度 n(1≤n≤60);第二行为该单向循环链表的各个元素 ,它们各不相同且都为数字;第三行为一个数字 m,表示链表中的一个元素值,要求输出时以该元素为起点反向输出整个双向链表。

输出格式
输出为一行,即完成双向链表后以反向顺序输出该链表,每两个整数之间一个空格,最后一个整数后面没有空格

#include<stdio.h>
#include<stdlib.h>

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

LinkedList insert(LinkedList head, Node *node, int index){
    if(head == NULL){
        if(index != 0){
            return head;
        }
        head = node;
        head->prior = head;
        head->next = head;
        return head;
    }
    if(index == 0){
        node->next = head;
        node->prior = head->prior;
        head->prior->next = node;
        head->prior = node;
        head = node;
        return head;
    }
    Node *current_node = head;
    int count = 0;
    while(current_node->next != head && count < index -1){
        current_node = current_node->next;
        count++;
    }
    if(count == index - 1){
        node->next = current_node->next;
        node->prior = current_node;
        current_node->next->prior = node;
        current_node->next = node;  
    }
    return head;
}

void output(LinkedList head, int val, int num){
    Node *current_node = head;
    int count = num;
    while(current_node->data != val){
        current_node = current_node->next;   
    }
    while(count--){
        printf("%d",current_node->data);
        current_node = current_node->prior;
        if(count != 0){
            printf(" ");
        }
    }
}

int main(){
    int n;
    scanf("%d\n",&n);
    LinkedList *linkedlist = NULL;
    for(int i = 0; i < n; i++){
        Node *node =(Node *)malloc(sizeof(Node));
        scanf("%d ",&node->data);
        node->next = NULL;
        node->prior = NULL; 
        linkedlist = insert(linkedlist, node, i);
    }
    int m;
    scanf("%d\n",&m);
    output(linkedlist, m, n);
    return 0;
}

相关文章

  • 双向链表&双向循环链表

    链表分为:单链表、单向循环链表、双向链表、双向循环链表本节主要说明:双向链表、双向循环链表 定义结点 一、双向链表...

  • 0x05双向循环链表

    1 双向循环链表创建 2 双向循环链表插入元素 3 遍历双向循环链表 4双向循环链表删除结点

  • 双向链表

    双向链表的结构 既然单链表有循环链表,双向链表当然也有双向循环链表,如下图: 问: 双向链表中某个节点p的后继节点...

  • 线性表--链式存储结构--双向链表

    双向链表 一、双向链表结构 双向链表结点结构 既然单链表可以有循环链表,那么双向链表当然也可以有。 由于这是双向链...

  • 数据结构与算法之数组与链表

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 链表

    链表 缺点:查找复杂有点:定点删除/插入元素 单链表 双向链表 循环链表 双向循环链表 数组与链表的区别 数据存储...

  • 数据结构与算法之栈与队列

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 常见的数据结构

    常见的数据结构有: 数组 链表单链表、双向链表、循环链表、双向循环链表、静态链表 栈顺序栈、链式栈 队列普通队列、...

  • 33_双向循环链表的实现

    关键词:双向循环链表 0. 课程目标 使用Linux内核链表实现双向循环链表 template < typenam...

  • 数据结构与算法04-双向链表以及双向循环链表

    一、双向链表 0、定义结点 1、创建双向链接 2、打印循环链表的元素 3、双向链表插入元素 4、删除双向链表指定位...

网友评论

      本文标题:双向循环链表

      本文链接:https://www.haomeiwen.com/subject/hnkddltx.html