首页 > 其他分享 >7-2 双向循环链表应用

7-2 双向循环链表应用

时间:2022-10-25 00:01:22浏览次数:97  
标签:head int elem next 链表 prior 循环 双向 DuLNode

已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,实现交换p所指向的结点和它的前缀结点的顺序。

#include<iostream>
#define ElemType int
using namespace std;

typedef struct DuLNode
{
    ElemType elem;
    struct DuLNode* prior;
    struct DuLNode* next;
}DuLNode,*DuLinkList;

DuLinkList input(DuLinkList& head, int x)
{
    head = new DuLNode;
    head->next = NULL;
    head->prior = NULL;
    head->elem = x;
    DuLNode* p, * q;
    p = head;
    for (int i = 0; i < x; i++)
    {
        q = new DuLNode;
        q->next = NULL;
        q->prior = p;
        p->next = q;
        cin >> q->elem;
        p = q;
    }
    return head;
}

DuLNode* getelem(DuLinkList L, int e)
{
    DuLNode* p;
    p = L->next;
    while (p && p->elem != e)
        p = p->next;
    return p;
}

void show(DuLinkList& head, int y)
{
    DuLNode* q;
    DuLNode* z = getelem(head, y);
    q = head->next;
    if (z == NULL)
    {
        cout << "未找到" << y;
        return;
    }
    while (q && q != NULL)
    {
        if (q != z->prior && q != z)
            cout << q->elem;
        else if (q == z->prior)
            cout << q->next->elem;
        else if (q == z)
            cout << q->prior->elem;
        q = q->next;
    }
}
int main()
{
    int a, b;
    DuLinkList head;
    cin >> a;
    head = input(head, a);
    cin >> b;
    show(head, b);
    return 0;
}

 

标签:head,int,elem,next,链表,prior,循环,双向,DuLNode
From: https://www.cnblogs.com/fan-wang/p/16823523.html

相关文章

  • 力扣 114. 二叉树展开为链表-原地算法(O(1) 额外空间)详解
    114.二叉树展开为链表给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而......
  • 多重循环~2出现的次数
    题目描述:输入输入共1行,为两个正整数L和R,之间用一个空格隔开。输出输出共1行,表示数字2出现的次数1#include<stdio.h>2intmain(){3intm,n;4......
  • 常见的JavaScript的循环处理数据方法
    1.for循环letarr=[1,2,3];for(leti=0;i<arr.length;i++){ console.log(i,arr[i])}//01    //12   //232.forin循环letobj={name:'zhou......
  • JS事件循环之宏任务和微任务
    首先我们知道javascript是一个单线程的脚本语言,也就是说我们在执行代码的过程中不会出现同时进行两个进程(执行两段代码)。JS执行过程中会产生两种任务,分别是:同步任务和异......
  • 多重循环~平面分割
    题目描述:输入第一行输入一个整数m(m<=100),表示有m组测试数据。接下来的m行,每行有两个整数n和p,分别表示平面内的直线数和相交于一点直线数。 输出每组测试数据输出......
  • 使用Shell脚本进行语句循环
    使用Shell脚本进行语句循环......
  • c语言循环语句(c语言循环语句switch)
    C语言中循环语句有哪些?C提供三种基本的循环语句:for语句、while语句和do-while语句。一.for循环for循环是开界的。它的一般形式为:for(;;)语句;初始化总是一个赋值......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:合并两个有序链表
    题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:......
  • 局部反转链表
    给你单链表的头指针head和两个整数 left和right,其中 left<=right。请你反转从位置left到位置right的链表节点,返回反转后的链表。publicListNodere......
  • chap4 循环结构、chap6 回顾数据类型和表达式 第一小组 学习总结
    chap4循环结构第一小组学习总结一、内容梳理c语言循环结构是指根据某一条件判断重复执行的语句,核心内容为循环控制表达式,如果表达式为真,则继续执行;否则,循环结束。c语......