题解 | #转动链表#

转动链表

http://www.nowcoder.com/practice/afbec6b9d4564c63b2c149ccc01c5678

题目描述:将给定的链表向右转动k个位置,k是非负数。
例如:给定1->2->3->4->5->null , k=2,返回4->5->1->2->3->null。
示例1
        输入:{1,2},1
        返回值:{2,1}
思路:将给定的链表向右旋转k个位置,若链表为空则直接返回该链表;若链表不为空,则首先需要计算出链表的长度len,当k是链表长度len的整数倍时返回链表即可,反之需要令k%=len,然后遍历链表到第(len-k)个节点并截断,之后将两段连接上即可得到转动后的链表。具体代码如下:

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* rotateRight(ListNode* head, int k) 
    {
        // write code here
        if(head == NULL) return NULL;
        else
        {
            ListNode *res = (ListNode*)malloc(sizeof(ListNode)),*p = head;
            int len=0;
            while(p != NULL)
            {
                len++;//统计链表的长度,即链表中元素的个数
                p = p->next;
            }
            if(k <= 0 || (k % len == 0))
                return head;
            else
            {
                if(len == 1) return head;
                k %=len;
                int n=0;
                p = head;
                ListNode *q;
                while(n <=(len-k) && p != NULL)
                {
                    n++;
                    if(n == (len - k))
                    {
                        q = p->next;
                        p->next = NULL;
                        break;
                    }
                    p = p->next;
                }
                res->next = q;
                while(q != NULL)
                {
                    if(q->next == NULL)
                        break;
                    q = q->next;
                }
                q->next = head;
                return res->next;
            }
        }
    }
};
全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务