1 //按每k个结点反转链表 2 Node* turn_k(Node* head,int n,int k) 3 { 4 Node* p=head; 5 for(int t=1;t<k;t++) p=p->next; //为了获取最后的返回值,也就是链表指针 6 7 Node* cur=head; //为链表反转而准备的三个辅助指针cur,pre,pnext 8 Node *pre=NULL; 9 Node* pnext=NULL; 10 Node* r=NULL; //r是处理每段尾(首)部的辅助指针 11 Node *q=head; //q是为了获取下一链表段反转后的头地址 12 int m=n/k; 13 for(int i=1;i<=m;i++) 14 { 15 r = cur; //指针r保存当前将要反转段的尾结点 16 for(int j=1;j<=k;j++) 17 { 18 pnext = cur->next; 19 cur->next = pre; 20 pre = cur; 21 cur = pnext; 22 } 23 if(i<m) 24 { q=cur; 25 for(int t=1;t<k;t++) q=q->next; 26 r->next=q; //保证反转后链表段尾连上下一段反转后的头 27 } 28 if(i==m) r->next=cur; 29 } 30 return p; 31 }