链表翻转
2017-07-23 23:37
435 查看
1、给出一个链表和一个数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。
2、实现代码
k=2,翻转后2→1→4→3→6→5,
k=3, 翻转后3→2→1→6→5→4,
k=4,翻转后4→3→2→1→5→6。
2、实现代码
#include<iostream> #include<assert.h> using namespace std; typedef struct ListNode{ int _value; struct ListNode *Next;//指向下一个节点 struct ListNode* _random;//指向任意节点或者空节点 ListNode(int value, ListNode* next = NULL) :_value(value) ,Next(next) {} }; ListNode* ReceiveList(ListNode* pHead)//头插逆置单链表 { ListNode* pNewNode = NULL; ListNode* pCur = pHead; ListNode* pTemp = pHead; //链表为空或者链表只有一个结点返回该节点 if (NULL == pHead || NULL == pHead->Next) return pHead; while (pTemp) { pTemp = pCur->Next; pCur->Next = pNewNode; pNewNode = pCur; pCur = pTemp; } return pNewNode; } ListNode* part_reverse(ListNode* pHead, int length, int k) { if (pHead == NULL || k <= 1 || k > length) return pHead; ListNode* pHead1 = pHead; ListNode* pCur = NULL; int idx = 1; while (pHead1 && idx < k) { pHead1 = pHead1->Next; idx++; } pCur = pHead1; pHead1 = pHead1->Next; pCur->Next = NULL; pCur = ReceiveList(pHead); ListNode* pHead2 = part_reverse(pHead1, length - k, k); pHead->Next = pHead2; return pCur; } void pRintList(ListNode* pHead) { if (NULL == pHead) cout << "空链表" << endl; else { while (pHead->Next) { cout << pHead->_value << " "; pHead = pHead->Next; } cout << pHead->_value<<" "; } cout << "NULL" << endl; } int main() { ListNode* pHead1 = new ListNode(1); ListNode* pCur = pHead1; for (int i = 2; i < 10; i++) { ListNode* tmpNode = new ListNode(i); pCur->Next = tmpNode; pCur = tmpNode; } pRintList(pHead1); ListNode*pNew = part_reverse(pHead1, 9, 2); pRintList(pNew); system("pause"); return 0; }
相关文章推荐
- 单链表的全翻转及固定半径翻转
- 链表翻转
- 链表翻转【比如链表1→2→3→4→5→6,k=2, 翻转后2→1→4→3→6→】
- 翻转单链表
- 一个 while 实现 C 翻转单向链表
- 链表的翻转(史上最简)
- 原地排序与链表翻转
- 0016单链表的完整功能及单链表翻转
- 翻转链表
- 链表的翻转实现
- 链表翻转(面试题目 C语言实现)
- Java 实现单链表翻转代码
- 链表翻转和排序
- 链表翻转
- 1074. Reversing Linked List (25)【链表翻转】——PAT (Advanced Level) Practise
- <LeetCode> 题35:翻转链表1(翻转整个链表)
- 翻转链表1和2
- 链表翻转
- 翻转单向链表
- C++循环链表中进行元素的翻转