doyoo.C 2020-04-15 18:19
浏览 350

双向链表反转问题(c++)

    void reverse() {
        node* pre = NULL;
        node* next = NULL;
        node* current = header->next;
        while (current != NULL) {
            next = current->next;
            current->next = pre;
            if (next == NULL) {
                header->next = current;
                current->pre = header;
                break;
            }
            pre = current;
            current->pre = next;
            current = next;
        }
    }
void reverse() {
    node* current = header->next;
    current->pre = NULL;
    while (current != NULL) {
        node* next = current->next;
        current->next = current->pre;
        if (next == NULL) {
            header->next = current;
            current->pre = header;
            break;
        }
        current->pre = next;
        current = next;
    }
}
void addbegin(int val) {
        node* temp = new node(val, header,header->next);
        header->next = temp;
    }

下面是node类的实现

class node {
public:
    int val;
    node* next;
    node* pre;
    node(){}
    node(int val, node* pre,node* next) {
        this->val = val;
        this->pre = pre;
        this->next = next;
    }
};

上面是我实现的双向链表的反转链表的方法

但是第二种实现方法存在一些问题,在addbegin方法使用以后再使用第二种
reverse方法,则链表的反转会出现错误
例:
现有链表为 1 2 3 4
addbegin(0)后为 0 1 2 3 4
再使用第二种reverse() 链表为4 3 2 1 0 4 3 2 1 0 4 3 2 1 0·······

但是如果不使用addbegin方法 则第二种方法的反转是正常的。
请问 问题出在哪里,debug半天也没有找出问题
(第一种实现是完全正确的,header为头结点)

  • 写回答

1条回答 默认 最新

  • doyoo.C 2021-01-20 15:44
    关注

    啊这是我npy问的,他应该已经解决了吧(挠头

    评论

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图