首页 > 其他分享 >11.21

11.21

时间:2024-11-21 22:23:34浏览次数:1  
标签:Node 链表 head 11.21 current prior 节点

include

include

using namespace std;

// 双向链表结点结构体
struct Node {
int data;
Node* prior;
Node* next;
Node(int val) : data(val), prior(nullptr), next(nullptr) {}
};

// 双向循环链表类
class CircularDoublyLinkedList {
public:
Node* head;

CircularDoublyLinkedList() : head(nullptr) {}

// 构建双向循环链表
void createList(const vector<int>& elements) {
    if (elements.empty()) return;
    head = new Node(elements[0]);
    Node* current = head;
    for (int i = 1; i < elements.size(); ++i) {
        Node* newNode = new Node(elements[i]);
        current->next = newNode;
        newNode->prior = current;
        current = newNode;
    }
    current->next = head;  // 形成循环
    head->prior = current;
}

// 查找指定值的结点
Node* findNode(int value) {
    if (!head) return nullptr;
    Node* current = head;
    do {
        if (current->data == value) return current;
        current = current->next;
    } while (current != head);
    return nullptr;
}

// 交换指定结点与前驱结点的位置
bool swapWithPrior(Node* node) {
    if (!node || !node->prior) return false;  // 如果没有前驱结点,不能交换

    Node* priorNode = node->prior;
    Node* nextNode = node->next;

    // 处理交换
    if (priorNode == head) {
        head = node;  // 如果是头结点,特殊处理
    }

    priorNode->next = nextNode;
    if (nextNode) nextNode->prior = priorNode;

    node->next = priorNode;
    node->prior = priorNode->prior;
    if (priorNode->prior) priorNode->prior->next = node;
    priorNode->prior = node;

    return true;
}

// 输出链表
void printList() const {
    if (!head) return;
    Node* current = head;
    do {
        cout << current->data;
        current = current->next;
    } while (current != head);
    cout << endl;
}

};

// 主函数
int main() {
int n, swapValue;
cin >> n; // 输入元素个数
vector elements(n);
for (int i = 0; i < n; ++i) {
cin >> elements[i]; // 输入元素值
}
cin >> swapValue; // 输入要交换的元素值

CircularDoublyLinkedList cdll;
cdll.createList(elements);

Node* node = cdll.findNode(swapValue);

if (node == nullptr) {
    cout << "未找到" << swapValue << endl;
} else {
    if (cdll.swapWithPrior(node)) {
        cdll.printList();
    } else {
        cout << "未找到" << swapValue << endl;
    }
}

return 0;

}
代码解析
Node结构体:定义了链表的节点,包含数据data,指向前驱节点prior和后继节点next。

CircularDoublyLinkedList类:包含了链表操作:

createList():根据输入的元素创建一个双向循环链表。
findNode():查找值为value的节点。
swapWithPrior():交换当前节点和前驱节点的顺序。如果交换成功,返回true,否则返回false。
printList():输出链表中所有节点的数据。
主函数:

输入节点的个数、节点的值和需要交换的节点的值。
创建链表并查找需要交换的节点。
如果节点存在,执行交换操作并输出结果。如果节点不存在,输出“未找到”。
样例输入和输出
输入示例 1:

6
1 2 3 4 5 6
6
输出示例 1:

123465
输入示例 2:

5
10 20 30 40 50
60
输出示例 2:

未找到60
关键注意事项
链表的循环结构:确保链表的最后一个节点指向头节点,同时头节点的前驱指向最后一个节点。
交换操作:确保节点交换时,前驱节点和后继节点的指针正确更新。如果交换的是头结点,还需要更新head指针。
输入输出:按照要求进行格式化输出,确保输入的节点数与节点值符合规范。
这样,以上C++代码可以处理双向循环链表中的结点交换问题。

标签:Node,链表,head,11.21,current,prior,节点
From: https://www.cnblogs.com/hjz20050621/p/18561659

相关文章

  • 2024.11.21模拟赛
    今天照常七点半左右到学校,结果入门发现氛围不对。打开手机,发现题目压缩包已经发了,我当时就是一个问号。(一定是刚开始耽误的几分钟耽误我写T2了!!!)然后就开始写题。这套题的难度对于我还好,不会出现打完暴力只能摆烂的情况。(但出现了先摆烂然后疯狂打暴力的情况)T1第一眼看着花......
  • [2024.11.21]IOI 赛制练习赛
    我爱IOI赛时虽然小L说题目按照字典序排列,但是我还是决定先看T1。由于是图论专场,所以我直接大胆对数据连边,然后胡了一个并查集,感觉很对。但发现不太好维护当前状态如何插入新值,简单画了一会发现只需要维护一个\(vis\)数组并放到祖先那里,就可以维护能否操作了。单身时间......
  • 11.21 打工
    11.21打工copypropertiestry{if(StringUtils.isBlank(modelCode)){returnR.fail("modelCode不能为空");}ModelCenterresult=this.lambdaQuery().eq(ModelCenter::getModelCode,modelCode).on......
  • 11.21
    如何评价OI赛制无pretest仅有至多两个CF同等强度的极小样例?340->170是最好的答案。A.括号序列每个括号找出和它匹配的括号,同时求出\(pre_i\)和\(nxt_i\)分别代表与\(i\)同层的前缀括号匹配数和后缀括号匹配数,那么当前层给\(i\)贡献为\((pre_i+1)\times(suf_{r_......
  • 24.11.21
    A怎么只有我一个写这种唐诗做法啊/kk当括号匹配时会对若干区间造成贡献。如果我们考虑每个右括号作为右端点统计贡献区间的话,左侧所有和它同一括号范围内(或最外层)的同层的左括号作为左端点和其构成一个贡献区间。举例子来说\(({\color{blue}(}))({\color{yellow}(}){\color{......
  • 11.21
    实验21:观察者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解观察者模式的动机,掌握该模式的结构;2、能够利用观察者模式解决实际问题。 [实验任务一]:股票提醒当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价......
  • PDF24 Creator(PDF工具箱) v11.21.0 绿色版
    PDF24Creator(PDF工具箱)v11.21.0绿色版 PDF24Creator是一款简单易用的多功能PDF创建工具。软件基于PDF打印机的原理而制作,用户使用这款软件可以帮助你轻松创建PDF文件。软件除了基本的PDF创建功能外,还有一个PDF转换功能,可以将其他格式的文件转换为磁盘PDF......
  • 11.21浏览一行信息
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><%@pageimport="java.sql.*"%><%@pageimport="javax.naming.*"%><%@pageimport="javax.*"%><html><body&g......
  • 11.21
    今天实现Mapper类LogOnMapperpackagecom.example.mapper;importcom.example.pojo.Department;importcom.example.pojo.Staff;importorg.apache.ibatis.annotations.*;importjava.time.LocalDate;importjava.util.List;@MapperpublicinterfaceLogONMapper{......
  • 11.21
    1.用结构体存放如下表中的数据,然后输出每个人的姓名和实发工资(实发工资=基本工资+浮动工资-支出)姓名基本工资浮动工资支出Tom1240.00800.0075.00Lucy1360.00900.0050.00Jack1560.001000.0080.00程序代码:#inclu......