zoukankan      html  css  js  c++  java
  • 61. Rotate List(M);19. Remove Nth Node From End of List(M)

    61. Rotate List(M)

    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.
    • Total Accepted: 102574
    • Total Submissions: 423333
    • Difficulty: Medium
     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *rotateRight(ListNode *head, int k) {
    12         if (head == nullptr || k == 0) return head;
    13         int len = 1;
    14         ListNode* p = head;
    15         while (p->next) { //
    16             len++;
    17             p = p->next;
    18         }
    19         k = len - k % len;
    20         p->next = head; //
    21         for(int step = 0; step < k; step++) {
    22             p = p->next; //
    23         }
    24         head = p->next; //
    25         p->next = nullptr; //
    26         return head;
    27     }
    28 };

    16ms 19.35%

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {// by guxuanqing@gmail.com
    10 public:
    11     ListNode* rotateRight(ListNode* head, int k)
    12     {
    13         if(NULL == head || NULL == head->next) return head;//null or one node
    14         ListNode *p = NULL, *q = head;
    15         int len = 1;
    16         while (q->next)//cal the length of the list
    17         {
    18            ++len;
    19             q = q->next;
    20         }
    21         q->next = head;
    22         k %= len;
    23         int tmp = len - k;
    24         q = head;
    25         while (--tmp)
    26         {
    27             q = q->next;
    28         }
    29         head = q->next;
    30         q->next = NULL;
    31         return head;
    32     }
    33 };

    19. Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head.
    
    For example,
    
       Given linked list: 1->2->3->4->5, and n = 2.
    
       After removing the second node from the end, the linked list becomes 1->2->3->5.
    Note:
    Given n will always be valid.
    Try to do this in one pass.
    • Total Accepted: 169535
    • Total Submissions: 517203
    • Difficulty: Medium
     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *removeNthFromEnd(ListNode *head, int n) {
    12         ListNode dummy(-1);
    13         dummy.next = head;
    14         ListNode *p = &dummy, *q = &dummy;
    15         for (int i = 0; i < n; i++)//q先走n步
    16             q = q->next;
    17         while(q->next) {
    18             p = p->next;
    19             q = q->next;
    20         }
    21         ListNode *tmp = p->next;
    22         p->next = p->next->next;
    23         delete tmp;
    24         return dummy.next;
    25     }
    26 };

    6ms 64.75%

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {// by guxuanqing@gmail.com
    10 public:
    11     ListNode* removeNthFromEnd(ListNode* head, int n) {
    12         if(NULL == head || NULL == head->next) return NULL;//null or one node
    13         ListNode dummy(-1);
    14         dummy.next = head;
    15         ListNode *p = &dummy, *q = &dummy;
    16         int tmp = n;
    17         while (tmp--)
    18         {
    19             q = q->next;
    20         }
    21         while (q->next)
    22         {
    23             q = q->next;
    24             p = p->next;
    25         }
    26         ListNode *rnode = p->next;
    27         p->next = rnode->next;
    28         delete rnode;
    29         return dummy.next;
    30     }
    31 };

    9ms 23.47%

  • 相关阅读:
    20135213——信息安全系统设计基础第十周学习总结
    20135213 20135231 信息安全系统设计基础课程第一次实验报告
    20135213——信息安全系统设计基础第九周学习总结
    家庭作业 汇总(更新调整)
    20135213——信息安全系统设计基础第八周期中总结
    家庭作业第三章3.57
    20135213——信息安全系统设计基础第七周学习总结
    20135213——信息安全系统设计基础第六周学习总结
    笔记
    20135213-信息安全系统设计基础第四周学习总结
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/6759192.html
Copyright © 2011-2022 走看看