C++程序将链表从位置m反转到n

标签 c++ linked-list

我在这个简单的问题上停留了几个小时...有人可以帮忙...我哪里错了吗?

问题:将链表从位置 m 反转到 n。就地一次性完成。

例如: 给定 1->2->3->4->5->NULL,m = 2 和 n = 4,

返回 1->4->3->2->5->NULL。

注意:1≤m≤n≤列表长度

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;

struct node
{
    int data;
    struct node *next;
};
typedef struct node ListNode;

node *newNode(int key)
{
    node *temp = new node;
    temp->data = key;
    temp->next = NULL;
    return temp;
}

ListNode* reverseUpto(ListNode *head, int size)
{
    if(size<=1)
        return head;
    ListNode *cur=head,*newhead=NULL,*temp;
    for(int i=0;i<size;i++)
    {
        temp=cur;
        cur=cur->next;
        temp->next=newhead;
        newhead=temp;
    }
    head->next=cur;
    return newhead;
}

ListNode* reverseBetween(ListNode* A, int m, int n)
{
    ListNode *head=A;
    if(m==n)
        return A;
    ListNode *dummyhead=newNode(0);
    dummyhead->next=head;
    ListNode *prev=dummyhead;
    ListNode *cur=head;
    int counter=1;
    while(counter<m)
    {
        printf("counter= %d     prev=%d     cur=%d\n",counter,prev->data,cur->data);
        counter++;
        prev=cur;
        cur=cur->next;
    }
    prev->next=NULL;
    ListNode * retPtr=reverseUpto(cur,m-n+1);
    prev->next=retPtr;
    return A;
}

void printlist(node *head)
{
    while(head != NULL)
    {
        cout << head->data << " ";
        head = head->next;
    }
    cout << endl;
}

int main()
{
    node *head1 = newNode(1);
    head1->next = newNode(2);
    head1->next->next = newNode(3);
    head1->next->next->next = newNode(4);
    head1->next->next->next->next = newNode(5);
    head1->next->next->next->next->next = newNode(6);
    head1->next->next->next->next->next->next = newNode(7);
    head1->next->next->next->next->next->next->next = newNode(8);
    cout << "Given linked list\n";
    printlist(head1);
    head1=reverseBetween(head1,3,5);
    cout << "\nReversed linked list\n";
    printlist(head1);
    return 0;
}

我得到的输出与我的输入相同!!....陷阱在哪里?

最佳答案

ListNode * retPtr=reverseUpto(cur,m-n+1);

修改为

ListNode * retPtr=reverseUpto(cur,n-m+1);

关于C++程序将链表从位置m反转到n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360699/

相关文章:

C 链表销毁函数

c - 链表无法打印所有元素

c++ - CRTP 的运行时多态性设计和策略

c++ - C 中的副作用

c++ - 推广和拓展是一回事吗?

c++ - 表达式 -2[array] 是如何工作的?

c++ - 为什么用户定义的字符串文字和整数文字具有不同的行为?

java - Java 升序循环链表

c - 查找两个相交链表的公共(public)节点

c++ - 我把这个 if 语句放在哪里有什么不同吗?