美文网首页
5.6. 遍历循环单链表

5.6. 遍历循环单链表

作者: 易百教程 | 来源:发表于2018-11-14 09:29 被阅读27次

遍历循环单链表可以通过循环完成。 将临时指针变量temp初始化为head指针并运行while循环,直到tempnext指针变为head。 算法和实现该算法的c函数描述如下。

算法

第1步:设置PTR = HEAD
第2步:如果PTR = NULL
        提示 内存溢出
        转到第8步
    [IF结束]

第4步:重复第5步和第6步直到 PTR→NEXT!= HEAD
第5步:打印PTR→DATA
第6步:PTR = PTR→NEXT
[循环结束]

第7步:打印PTR->DATA
第8步:退出

C语言实现示例代码,如下所示 -

#include<stdio.h>  
#include<stdlib.h>  
void create(int);
void traverse();
struct node
{
    int data;
    struct node *next;
};
struct node *head;
void main()
{
    int choice, item;
    do
    {
        printf("1.Append List\n2.Traverse\n3.Exit\n4.Enter your choice?");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            printf("Enter the item\n");
            scanf("%d", &item);
            create(item);
            break;
        case 2:
            traverse();
            break;
        case 3:
            exit(0);
            break;
        default:
            printf("Please enter valid choice\n");
        }

    } while (choice != 3);
}
void create(int item)
{

    struct node *ptr = (struct node *)malloc(sizeof(struct node));
    struct node *temp;
    if (ptr == NULL)
    {
        printf("OVERFLOW\n");
    }
    else
    {
        ptr->data = item;
        if (head == NULL)
        {
            head = ptr;
            ptr->next = head;
        }
        else
        {
            temp = head;
            while (temp->next != head)
                temp = temp->next;
            ptr->next = head;
            temp->next = ptr;
            head = ptr;
        }
        printf("Node Inserted\n");
    }

}
void traverse()
{
    struct node *ptr;
    ptr = head;
    if (head == NULL)
    {
        printf("nothing to print");
    }
    else
    {
        printf("printing values ... \n");

        while (ptr->next != head)
        {

            printf("%d\n", ptr->data);
            ptr = ptr->next;
        }
        printf("%d\n", ptr->data);
    }

}

执行上面示例代码,得到以下结果 -

1.Append List
2.Traverse
3.Exit
4.Enter your choice?1

Enter the item
23

Node Inserted
1.Append List
2.Traverse
3.Exit
4.Enter your choice?2

 printing values ... 
23

相关文章

  • 5.6. 遍历循环单链表

    遍历循环单链表可以通过循环完成。 将临时指针变量temp初始化为head指针并运行while循环,直到temp的n...

  • 单链表循环检测

    单链表中的循环如果链表带循环,从表头开始遍历,最终一定会进入链表循环中使得遍历过程无法适当停止。 两质点在同一圆周...

  • 判断单链表是否有环及寻找环的

    若单链表中存在环,则环肯定在单链表的尾部,如果通过一个指针遍历单链表,最终这个指针会在单链表尾部的环中不断循环,其...

  • 2018-03-19 循环链表

    为什么要用循环链表,因为查找遍历如果不从头结点开始的话,那么就无法遍历整个链表 循环链表:注意观察循环链表的结构 ...

  • 如何快速找到未知长度单链表的中间节点

    普通方法: 首先遍历一遍单链表,确定单链表长度L,然后再次从头结点出发,循环L/2次找到单链表的中间结点。算法复杂...

  • 0x05双向循环链表

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

  • js+链表

    链表结构 删除链表某节点 遍历 反转单链表

  • 剑指Offer-两个链表的第一个公共结点

    描述: 输入两个链表,找出它们的第一个公共结点;注:链表为单链表 法一: 分析: 使用双重循环,依次遍历pHead...

  • 数据结构-3、如何在一次传递(遍历)中找到长度未知的单链表的中间

    问题准备知识:链表有三种:单向、双向、循环。对于一个单链表,只能从链表的一段开始遍历,对于双链表,可以两端同时开始...

  • 24_单链表的遍历与优化

    关键词:单链表遍历的优化、结点的封装 1. 当前单链表的遍历方法 2. 设计思路(游标) 1) 在单链表的内部定义...

网友评论

      本文标题:5.6. 遍历循环单链表

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