您的位置:首页 > 职场人生

面试题—链表的‘部分’翻转

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;
     }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: