[leetcode-61]Rotate List(c)

来源:互联网 发布:linux解压t命令gunzip 编辑:程序博客网 时间:2024/06/08 17:50

问题描述:
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.

分析:这道题的题意,其实我没审明白,它的意思是说,有一个链表,然后以k为轴进行旋转,其中k是剩余的元素,也即,待旋转点距离最后一个点位置恰好为k(其实是k%len(list))。

代码如下:4ms

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* rotateRight(struct ListNode* head, int k) {    int length = 0;    struct ListNode *headhead = head;    while(headhead){        length++;        headhead = headhead->next;    }    if(!length)        return head;    int index = k%length;    if(index==0)        return head;    struct ListNode *headheadhead = head;    headhead = head;    while(index--){        headheadhead = headheadhead->next;    }    while(headheadhead->next!=NULL){        headhead = headhead->next;        headheadhead = headheadhead->next;    }    struct ListNode *tmpHead = headhead->next;    headhead->next = NULL;    headheadhead->next = head;    head = tmpHead;    return head;}
0 0
原创粉丝点击