链表翻转,每k个进行翻转
2013-09-19 22:49
232 查看
链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6
#include <iostream> using namespace std; struct node{ int data; node* next; }; node* init(int n) { node* head = new node; head->data = 1; head->next = NULL; node* p, *q; p = head; for(int i=2; i<=n; i++) { q = new node; q->data = i; p->next = q; p = q; } q->next = NULL; return head; } node* reverse(node* h) { if(h==NULL || h->next==NULL) return h; node* n = h->next; node* r = reverse(n); n->next = h; h->next = NULL; return r; } node* part_reverse(node* h, int n, int k) { if(h==NULL || k<=1 || k>n) return h; node* h1 = h, *t; int i=1; while(h1 && (i++)<k) h1 = h1->next; t = h1; h1 = h1->next; t->next = NULL; t = reverse(h); node* h2 = part_reverse(h1, n-k, k); h->next = h2; return t; } int main(void) { while(1) { int n, k; cin>>n>>k; node* h = init(n); node* t; h = part_reverse(h, n, k); t = h; while(t) { cout<<t->data<<" "; t = t->next; } cout<<endl; } return 0; }
相关文章推荐
- 链表以k个一组进行翻转(2014美团研发笔试)
- 每K个元素翻转一次链表,若最后剩余元素不足K个,不进行翻转(美团2014校招试题)
- C++循环链表中进行元素的翻转
- 单链表中k个结点一组进行反转
- 链表翻转:给出一个链表和一个数k,链表前k个节点进行翻转
- C++循环链表中进行元素的翻转
- 翻转单链表中的K个节点——By Java
- C++循环链表中进行元素的翻转
- 【LeetCode-面试算法经典-Java实现】【025-Reverse Nodes in k-Group(单链表中k个结点一组进行反转)】
- C++循环链表中进行元素的翻转
- [LeetCode] Reverse Nodes in k-Group 每k个一组翻转链表
- C++循环链表中进行元素的翻转
- 链表翻转(每K个结点进行一次逆置)
- C++循环链表中进行元素的翻转
- C++循环链表中进行元素的翻转
- [2014美团网笔试]给定一个单链表和一个整数k,要求每隔k个元素翻转链表
- 构建链表进行冒泡排序,翻转,链表合并测试
- C++循环链表中进行元素的翻转
- C++循环链表中进行元素的翻转
- Reverse Nodes In K Group,将链表每k个元素为一组进行反转---特例Swap Nodes in Pairs,成对儿反转