技術的なインタビューの準備をしていますが、リンクリストのk個のノードをすべてリバースするためにこのプログラムを書いていません。例えばリンクリストのすべてのk個のノードを逆転します
1->2->3->4->5->6 //Linked List
2->1->4->3->6->5 //Output for k=2
編集:ここでは
が私のコードです。私は出力として6-> 5を得るだけです。
struct node* recrev(struct node* noode,int c)
{
struct node* root=noode,*temp,*final,*prev=NULL;
int count=0;
while(root!=NULL && count<c)
{
count++;
temp=root->link;
root->link=prev;
prev=root;
root=temp;
}
if(temp!=NULL)
noode->link=recrev(temp,c);
else
return prev;
}
何か助けていただければ幸いです。ありがとう。
EDIT:下記のようにEran Zimmerman's Algorithmを実装しようとしました。
struct node* rev(struct node* root,int c)
{
struct node* first=root,*prev,*remaining=NULL;
int count=0;
while(first!=NULL && count<c)
{
count++;
prev=first->link;
first->link=remaining;
remaining=first;
first=prev;
}
return remaining;
}
struct node* recc(struct node* root,int c)
{
struct node* final,*temp,*n=root,*t;
int count=0;
while(n!=NULL)
{
count=0;
temp=rev(n,c);
final=temp;
while(n!=NULL && count<c)
{
printf("inside while: %c\n",n->data); // This gets printed only once
if(n->link==NULL) printf("NULL"); //During first iteration itself NULL gets printed
n=n->link;
final=final->link;
count++;
}
}
final->link=NULL;
return final;
}
そして、あなたの質問は何ですか? –
私の質問を編集し、自分のコードを追加しました。 – Vivek
http://stackoverflow.com/questions/1801549/reverse-a-singly-linked-list – celavek