Ich habe versucht, paarweise Swap von Linkedlist-Elementen zu tun. Anstelle der Elemente von Daten tauschen, ich tauschen sie durch die Links tauschen:Pairwise Swap von Knoten ohne Daten in LinkedList zu vertauschen
Eingang 1: 1->2->3->4->5
Ausgang 1: 2->1->4->3->5
Eingang 2: 1->2->3->4->5->6
Ausgang 2: 2->1->4->3->6->5
#include <iostream>
using namespace std;
struct node{
int data;
struct node *next;
};
struct node* func(struct node *f, struct node *s){
if(s==NULL){
return f;
}
struct node *rest1;
rest1 = s->next;
s->next = f;
if(rest1){
f->next = func(rest1,rest1->next);
}
return s;
}
void show(struct node *head){
while(head!=NULL){
cout<<" "<<head->data;
head = head->next;
}
}
int main() {
//code
struct node *head =(struct node*)malloc(sizeof(struct node));
head->data=1;
head->next = (struct node*)malloc(sizeof(struct node));
head->next->data = 2;
head->next->next = (struct node*)malloc(sizeof(struct node));
head->next->next->data = 3;
head->next->next->next = (struct node*)malloc(sizeof(struct node));
head->next->next->next->data = 4;
//head->next->next->next->next=(struct node*)malloc(sizeof(struct node));
//head->next->next->next->next->data=5;
head = func(head,head->next);
show(head);
return 0;
}
Dieser Code funktioniert gut für die Liste der ungeraden Länge, funktioniert aber nicht für die gerade Länge. Ich denke, das Problem ist in:
if(s==NULL){
return f;
}
Aussage, die ich mache verwende zur vorherigen f->next=NULL
(bei gleicher Länge).
Dank aussehen für Hilfe. Ich habe noch einen Zweifel. Wenn ich die Anweisung if (rest1) {..} entferne, halte f-> next = func (rest1, rest1-> next); dann sollte in der nächsten Rekursion f-> next zu NULL werden, wenn (s == NULL) f zurückgibt, was NULL ist. Ich habe es versucht, aber das funktioniert nicht mehr. Kannst du erklären warum? – BigA
Dies liegt daran, dass rest1 null ist. Es gibt keinen Knoten, auf den rest1 zeigt. So wird rest1-> next nicht einmal existieren. –
Danke, dass Sie mir dabei geholfen haben – BigA