数据结构-循环单链表

Posted 二十四桥明月夜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构-循环单链表相关的知识,希望对你有一定的参考价值。

描述

 

创建一个循环链表,并从任意一个节点出发,遍历整个链表。 

部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。

 

void Destroy(Node* head)
{
    Node *p;
    while(head->next!=head)
    {
        p = head->next;
        head->next = p->next;
        free(p);
    }
    free(head);
}

int main()
{
    int n, x;
    scanf("%d", &n);
    Node *head = CreateLinkList(n);
    while(scanf("%d", &x)!=EOF)
    {
        PrintLinkList(head, x);
    }
    Destroy(head);
    return 0;
}

输入

 

输入数据第一行为正整数n,第二行为n个整数,为链表节点元素值,所有元素值不相同。接下来若干行,每行为一个整数x,为链表中任意一个元素值,输入到文件结束为止。

 

输出

 

从元素值为x的节点出发,遍历所有节点并输出,元素值之间用空格隔开。

 

样例输入

5
1 2 3 4 5
2
3
5
4

样例输出

2 3 4 5 1
3 4 5 1 2
5 1 2 3 4
4 5 1 2 3

代码测试:

技术分享图片
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct Node{
    int data;
    struct Node* next;
}Node;

Node* CreateLinkList(int n){
    Node *head,*p,*q;
    head=(Node*)malloc(sizeof(Node));
    int m;
    scanf("%d",&m);
    head->data=m;
    p=head;
    int i;
    for(i=1;i<n;i++){
        q=(Node*)malloc(sizeof(Node));
        scanf("%d",&m);
        q->data=m;
        p->next=q;
        p=p->next;
    }
    p->next=head;
    return head;
}

Node* PrintLinkList(Node *head,int x){
    Node *p;
    p=head;
    while(p->data!=x){
        p=p->next;
    }
    printf("%d",x);
    p=p->next;
    while(p->data!=x){
        printf(" %d",p->data);
        p=p->next;
    }
    printf("\n");
}

void Destroy(Node* head)
{
    Node *p;
    while(head->next!=head)
    {
        p = head->next;
        head->next = p->next;
        free(p);
    }
    free(head);
}

int main()
{
    int n, x;
    scanf("%d", &n);
    Node *head = CreateLinkList(n);
    while(scanf("%d", &x)!=EOF)
    {
        PrintLinkList(head, x);
    }
    Destroy(head);
    return 0;
}
View Code

 









以上是关于数据结构-循环单链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构链表,看这两篇就足够了(上集,动图版)

数据结构--线性表的链式存储之循环单链表

02循环单链表

单链表就地逆置的两种方法(递归与普通循环)

(王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表

线性表文档之循环单链表