链表翻转
2017-01-12 16:58
302 查看
描述:给出一个链表和一个数k,比如,链表为1→2→3→4→5→6,k=2,则翻转后2→1→6→5→4→3,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→6→5,用程序实现。
#include <iostream> using namespace std; typedef int Type; typedef struct LNode { Type key; LNode* next; }; LNode* reverseLinkList(LNode* head) { if (!head) { return NULL; } LNode* reversedHead = NULL; LNode* curNode = head; LNode* prev = NULL; while (curNode) { LNode* next = curNode->next; if (!next) { reversedHead = curNode; } //指针反转 curNode->next = prev; //下一状态 prev = curNode; curNode = next; } return reversedHead; } void traverseList(LNode* head) { if (!head) { return; } while (head) { cout << head->key << ' '; head = head->next; } cout << endl; } void test() { int len = 3; LNode** nodes = new LNode*[len]; memset(nodes, NULL, sizeof(LNode*) * len); if (len <= 0) { return; } nodes[0] = new LNode(); nodes[0]->key = 1; for (int i = 1; i < len; ++i) { nodes[i] = new LNode(); nodes[i]->key = i + 1; nodes[i - 1]->next = nodes[i]; } nodes[len - 1]->next = NULL; cout << "before reverse: "; traverseList(nodes[0]); LNode* reHead = reverseLinkList(nodes[0]); cout << "after reverse: "; traverseList(reHead); } int main() { test(); return 0; }
相关文章推荐
- 链表翻转,指定区间
- 链表的创建与翻转函数以及删除值为key的元素函数
- lintcode 中等题: reverse linked list II 翻转链表II
- 单链表翻转(递归与非递归)
- 翻转链表的C++实现
- C语言实现单链表翻转的递归算法
- 二叉树的高度 、销毁、链表的翻转(k为一组、n-m 之间)两种实现、
- 翻转部分链表
- 链表翻转
- 单向链表创建存入数组后翻转
- Python数据结构之翻转链表
- 翻转链表 II
- 单向链表每k个元素翻转一次。
- [leetcode 24]Swap Nodes in Pairs-----成对翻转链表中的节点
- 翻转链表
- lintcode翻转链表
- 链表翻转程序
- LintCode刷题阶段性总结---链表容易篇(翻转链表,删除链表重复元素,合并两个排序链表等)
- 链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
- 翻转部分链表