从头做leetcode之leetcode 61 旋转链表

61.旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

  • 简单的链表操作,先遍历一遍算出长度,第一个指针停在原链表尾部
  • 第二次遍历使得两个指针位于新链表的尾部和头部
  • 最后旋转
/** * Definition for singly-linked list. * struct ListNode { *int val; *ListNode *next; *ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* rotateRight(ListNode* head, int k) { if(k == 0) return head; if(head == NULL) return head; ListNode *p,*q,*s; int length=1; p = head; while(p->next){ length++; p=p->next; } if(k % length == 0) return head; while(k > length){ k -= length; } q = head; while(length-k-1 && q->next != NULL){ q=q->next; length--; } s=q->next; p->next=head; q->next=NULL; return s; } };

【从头做leetcode之leetcode 61 旋转链表】通过时间:
从头做leetcode之leetcode 61 旋转链表
文章图片

    推荐阅读