tôi đang chuẩn bị cho một cuộc phỏng vấn kỹ thuật và tôi đang bị mắc kẹt tại văn bản chương trình này để đảo ngược tất cả các k nút của danh sách liên kết.Xếp mỗi k các nút của một danh sách liên kết
Ví dụ
1->2->3->4->5->6 //Linked List
2->1->4->3->6->5 //Output for k=2
EDIT:
Đây là mã của tôi. Tôi chỉ nhận được 6-> 5 là đầu ra.
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;
}
Mọi trợ giúp đều được đánh giá cao. Cảm ơn.
EDIT: Tôi cố gắng thực hiện Eran Zimmerman Thuật toán như dưới đây.
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;
}
Và câu hỏi của bạn là gì? –
Tôi đã chỉnh sửa câu hỏi của mình, đã thêm mã của tôi. – Vivek
http://stackoverflow.com/questions/1801549/reverse-a-singly-linked-list – celavek