C++ 单链表中的SIGSEV
我正在编写一个代码,将一个单链表逆时针旋转K个节点。我编写了以下代码。例如,对于输入链表,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
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,谢谢你指出,愚蠢的错误:(