zoukankan      html  css  js  c++  java
  • [LeetCode] Rotate List 单项链表旋转

    Given a list, rotate the list to the right by k places, where k is non-negative.

    For example:
    Given 1->2->3->4->5->NULL and k = 2,
    return 4->5->1->2->3->NULL.

    Hide Tags
     Linked List Two Pointers
     
        这题有点难理解,k 的意思是链表右起第k 个,k 大于链的个数时候,循环读取,所以题目中k =5 的时候直接返回。思路是确定链表断开的地方,有个技巧是一个快指针先遍历k 次,然后快慢指针再一次遍历,如果快指针到尾了,这时候慢指针后于快指针k 次,刚好是右起k 步。
     
     1 #include <iostream>
     2 using namespace std;
     3 
     4 /**
     5  * Definition for singly-linked list.
     6  */
     7 struct ListNode {
     8     int val;
     9     ListNode *next;
    10     ListNode(int x) : val(x), next(NULL) {}
    11 };
    12 
    13 class Solution {
    14 public:
    15     ListNode *rotateRight(ListNode *head, int k) {
    16         if(head==NULL||k==0)  return head;
    17         int cnt =0;
    18         ListNode * first=head,*slow=head;
    19         while(cnt<k){
    20             if(first==NULL) first = head;
    21             first=first->next;
    22             cnt++;
    23         }
    24         if(first==NULL) return head;
    25         while(first->next!=NULL){
    26             first=first->next;
    27             slow=slow->next;
    28         }
    29         first->next=head;
    30         head = slow->next;
    31         slow->next = NULL;
    32         return head;
    33     }
    34 };
    35 
    36 int main()
    37 {
    38 
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    expect
    grep
    Python函数
    Python的set
    Python字典
    Python循环
    Python条件判断
    Python列表
    Python字符串
    Python组织代码块的形式
  • 原文地址:https://www.cnblogs.com/Azhu/p/4157381.html
Copyright © 2011-2022 走看看