leetcode61(旋转链表)--C语言实现

求:spa

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

示例 1:it

输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL

示例 2:io

输入: 0->1->2->NULL, k = 4
输出: 
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 
向右旋转 4 步: 2->0->1->NULL0->1->2->NULL2->0->1->NULL

解:List

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 
struct  ListNode* rotateRight( struct  ListNode* head,  int  k){
     int  size= 0 ;
     int  i;
     struct  ListNode* p1;
     struct  ListNode* p2;
     for (p1=head;p1!=NULL;p1=p1->next)
        size++;
     if (size== 0 return  head;
     int  times = k % size;
     struct  ListNode* pre = ( struct  ListNode*)malloc( sizeof  (  struct  ListNode));
     for (i= 0 ,p2=head;i<times;i++)
        p2=p2->next;
     for (p1=head;p2->next!=NULL;p2=p2->next)
        p1=p1->next;
     p2->next = head;
     pre->next = p1->next;
     p1->next = NULL;
     return  pre->next;
}
相关文章
相关标签/搜索