我在C ++中编写了一个函数,可以在单个链表中成对交换元素。但是,我想知道是否有更有效的方法来做同样的事情。具体来说,我写的函数有一个案例,当链表中只有两个元素时就会处理。我想知道这个案例是否可以省略并放在一般情况下。我试过这样做,但未能得到输出。可能吗?这是我的代码片段......
struct Node* swap(struct Node* head){
struct Node* temp = NULL;
struct Node* cur;
struct Node* next;
cur = head;
next = cur->next;
// Empty list.
if(head == NULL){
cout<<"List is empty. \n";
return NULL;
}
// Only one element in the list.
if(next == NULL){
return cur;
}
// If two elements in the list.
else if(next->next == NULL){
cur->next = NULL;
next->next = cur;
return next;
}
// General case.
else{
head = next;
while(cur!=NULL){
if(next == NULL)
break;
if(next->next == NULL)
break;
cur->next = next->next;
next->next = cur;
if(temp == NULL)
temp = cur;
else{
temp->next = next;
temp = cur;
}
cur = cur->next;
next = cur->next;
}
return head;
}
}
答案 0 :(得分:0)
是的,您可以包含两元素大小写,一元素大小写和一般情况下的零元素大小写。循环可以从
开始while(cur != NULL && cur->next != NULL)
答案 1 :(得分:0)
除非我遗漏了某些东西,否则Beta的解决方案似乎应该这样做。
另外,不是答案而是打扰我:
if(temp == NULL){
temp = cur;
}
else{
temp->next = next;
temp = cur;
}
如果temp最终以cur结尾,你可以将其压缩成
if(temp != NULL){
temp->next = next;
}
temp = cur;