首页 > 其他 > 详细

leetcode 之Reverse Nodes in k-Group(22)

时间:2016-05-19 16:20:51      阅读:175      评论:0      收藏:0      [点我收藏+]

技术分享

这题有点繁琐,在更新指针时很容易出错。

技术分享
ListNode *reverseKGroup(ListNode *head, int k)
      {
          if (head == nullptr || head->next == nullptr || k < 2)return head;

          ListNode dummy(-1);
          dummy.next = head;

          for (ListNode *prev = &dummy, *end = head; end; end = prev->next)
          {
              for (int i = 1; i < k; i++)
                  end = end->next;
              if (end == nullptr)break;

              prev = reverse(prev, prev->next, end);

          }

          return dummy.next;
      }

      ListNode *reverse(ListNode *prev, ListNode *begin, ListNode *end)
      {
          ListNode *end_next = end->next;
          for (ListNode *p = begin, *cur = p->next, *pnext = cur->next; cur != end_next;
              p = cur, cur = pnext, pnext =cur? pnext->next:nullptr)
          {
              cur->next = p;//注意指针的指向是一个一个的改变的
          }
          begin->next = end_next;
          prev->next = end;
          return begin;
      }
View Code

 

leetcode 之Reverse Nodes in k-Group(22)

原文:http://www.cnblogs.com/573177885qq/p/5508968.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!