C++ 单链表中的SIGSEV

C++ 单链表中的SIGSEV,c++,class,data-structures,linked-list,C++,Class,Data Structures,Linked List,我正在编写一个代码,将一个单链表逆时针旋转K个节点。我编写了以下代码。例如,对于输入链表,1,2,3,4,5,6,7,8旋转函数Node*rotate(Node*head,int k){}返回指向链表的头指针5,6,7,8,1,2,3,4。我编写了以下代码。在这段代码中,如果我在rotate函数中调用print(head),它会给出正确的输出,但一旦它将head指针返回main,它就会抛出SIGSEV或生成1,2,3,4 #include <iostream> using names

我正在编写一个代码,将一个单链表逆时针旋转K个节点。我编写了以下代码。例如,对于输入链表,
1,2,3,4,5,6,7,8
旋转函数
Node*rotate(Node*head,int k){}
返回指向链表的头指针
5,6,7,8,1,2,3,4
。我编写了以下代码。在这段代码中,如果我在rotate函数中调用
print(head)
,它会给出正确的输出,但一旦它将head指针返回main,它就会抛出SIGSEV或生成
1,2,3,4

#include <iostream>
using namespace std;
class List {
public:
    int data;
    List *next;
    explicit List(int element) : data(element), next(nullptr){}
};

List *insert() {
    int n, i, value;
    List *temp = nullptr, *head = nullptr;
    cin >> n;
    for(i = 0; i < n; ++i) {
        cin >> value;
        if(i == 0) {
            head = new List(value);
            temp = head;
            continue;
        } else {
            temp ->next = new List(value);
            temp = temp->next;
        }
    }
    return head;
}
void print(List *start) {
    while(start != nullptr) {
        cout << start ->data << " ";
        start = start->next;
    }
}

List* rotate(List* head, int k) {
    List *traverse = head, *temp = head;
    List *kth, *end;
    int i = 0;
    while(i < k - 1) {
        traverse = traverse ->next;
        ++i;
    }
    kth = traverse;
    while(traverse->next != nullptr) {
        traverse = traverse->next;
    }
    end = traverse;
    head = kth->next;
    kth->next = nullptr;
    end->next = temp;
    print(head);
    return head;
}

int main() {
    int k;
    List *head = insert();
    cin >> k;
    print(head);
    cout << endl;
    rotate(head, k);
    print(head);
    return 0;
}
#包括
使用名称空间std;
班级名单{
公众:
int数据;
列表*下一步;
显式列表(int元素):数据(元素),下一个(nullptr){
};
列表*插入(){
int n,i,值;
列表*temp=nullptr,*head=nullptr;
cin>>n;
对于(i=0;i>值;
如果(i==0){
head=新列表(值);
温度=水头;
继续;
}否则{
临时->下一步=新列表(值);
温度=温度->下一步;
}
}
回流头;
}
作废打印(列表*开始){
while(开始!=nullptr){
下一步是收集数据;
}
}
列表*旋转(列表*头部,整数k){
列表*导线=水头,*温度=水头;
列表*kth,*结束;
int i=0;
而(i下一步;
++一,;
}
kth=导线;
while(遍历->下一步!=nullptr){
遍历=遍历->下一步;
}
结束=横移;
head=kth->next;
kth->next=nullptr;
结束->下一步=温度;
打印头;
回流头;
}
int main(){
int k;
List*head=insert();
cin>>k;
打印头;

您不能将
中的
旋转(head,k);
更改为
head=rotate(head,k);
,或者将旋转签名更改为
无效旋转(List*&head,int k)
?如果
head
rotate
函数中被修改,则应通过引用传递,或将现有代码更改为@user3365922out@Wander3r,谢谢你指出,愚蠢的错误:(