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

ぐ巨炮叔叔 提交于 2020-03-20 00:04:53

3 月,跳不动了?>>>

求:

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

示例 1:

输入: 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:

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

解:

/**
 * 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;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!