面试题—链表的‘部分’翻转
2016-08-09 21:43
169 查看
问题:
给出一个单链表(不带头节点)和一个数K,请翻转此单链表?
例如:1->2->3->4->5 k = 0; 翻转过后:1->2->3->4->5
1->2->3->4->5 K = 2; 翻转过后:2->1->4->3->5
1->2->3->4->5 K = 10; 翻转过后:5->4->3->2->1
在讨论链表的‘部分’翻转问题之前,先回顾一下链表的逆置问题,如何将一个链表进行逆置?我们以前采用的方式是‘摘节点头插’的方法。假设右链表1->2->3->4->5,新建一个节点指针newHead=NULL,用cur指针指向链表的头节点,将摘下的节点用tmp进行保存,然后将tmp和newHead进行连接,将newHead指向tmp的位置上,如此循环直到cur为NULL结束。
■下面是‘摘节点头插’的简单图示:
■下面是详细的实现:
[code=cpp;toolbar:false">//链表节点的结构
struct Node
{
int data;
Node* _next;
};
void Reverse(Node* list)
{
if (list == NULL)
{
return;
}
Node* cur = list;
Node* newHead = NULL;
while (cur)
{
Node* tmp = cur;
cur = cur->_next;
tmp->_next = newHead;
newHead = tmp;
}
}
给出一个单链表(不带头节点)和一个数K,请翻转此单链表?
例如:1->2->3->4->5 k = 0; 翻转过后:1->2->3->4->5
1->2->3->4->5 K = 2; 翻转过后:2->1->4->3->5
1->2->3->4->5 K = 10; 翻转过后:5->4->3->2->1
在讨论链表的‘部分’翻转问题之前,先回顾一下链表的逆置问题,如何将一个链表进行逆置?我们以前采用的方式是‘摘节点头插’的方法。假设右链表1->2->3->4->5,新建一个节点指针newHead=NULL,用cur指针指向链表的头节点,将摘下的节点用tmp进行保存,然后将tmp和newHead进行连接,将newHead指向tmp的位置上,如此循环直到cur为NULL结束。
■下面是‘摘节点头插’的简单图示:
■下面是详细的实现:
[code=cpp;toolbar:false">//链表节点的结构
struct Node
{
int data;
Node* _next;
};
void Reverse(Node* list)
{
if (list == NULL)
{
return;
}
Node* cur = list;
Node* newHead = NULL;
while (cur)
{
Node* tmp = cur;
cur = cur->_next;
tmp->_next = newHead;
newHead = tmp;
}
}
相关文章推荐
- 面试题—链表的‘部分’翻转
- 剑指offer--面试题16:翻转链表--Java实现
- 九章算法面试题73 翻转链表II
- 九章算法面试题72 翻转链表I
- 面试题:题目: 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5
- 链表的部分翻转
- 链表部分翻转-Java
- 链表:部分翻转
- 部分翻转链表Reverse Linked List II
- 35. 翻转链表(reverse-linked-list)(c++)----lintcode面试题之链表
- 链表的部分翻转
- 面试题:链表翻转。
- 算法学习-链表的部分翻转
- 链表的部分翻转
- 翻转部分链表
- [C++]链表部分翻转
- <LeetCode> 题36:翻转链表2(翻转指定部分)
- 部分翻转链表
- 【经典面试题】翻转单链表
- 剑指Offer面试题16(Java版):翻转链表