题解 | #调整牛群顺序#

调整牛群顺序

https://www.nowcoder.com/practice/a1f432134c31416b8b2957e66961b7d4

考察知识点:排序,指针

解题分析:这里的解题思路就是创建一个head_list链表,使其与tmp_head链表始终相差n-1个成员,这样在tmp_head遍历到最后一个成员的时候,head_list成员就遍历到 了倒数第n-1个成员,那么第n个成员就是head_list->next,只需要将这个成员移动到最后就可以完成解题了

采用的编码语言:C

完整的编码代码:如下所示

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param n int整型 
 * @return ListNode类
 */
struct ListNode* moveNthToEnd(struct ListNode* head, int n ) {
    struct ListNode *tmp_head = head;
    struct ListNode *head_list = NULL;
    int count = 0;

    while (1) {
        if (tmp_head->next != NULL) {	// 如果不是最后一个成员,就更新当前成员的地址为下一个成员的地址
            if (count == (n-1))		// 当tmp_head遍历了 n-1 便后,就给head_list赋值链表头,使其与tmp_head差 n-1个成员
                head_list = head;
            else if (count > (n-1))		// 更新tmp_head使其与tmp_list始终差值在n-1上
                head_list = head_list->next;
            
            tmp_head = tmp_head->next;		// 更新当前tmp_head为下一个成员
        } else {		// 如果已经遍历到了最后一个成员
            if (head_list != NULL) {	// 已经初始化了head_list,也就是整个链表长度大于n的情况下,head_list的next成员就是我们需要找到的倒数第n个成员,将其移动到最后一个成员
                tmp_head->next = head_list->next;
                head_list->next = head_list->next->next;
                tmp_head->next->next = NULL;
            } else if (count == (n-1)) {	// 这里当整个链表的长度和n相等的情况下,head_list还没来得及初始化,就已经遍历到了链表最后一个成员;这时候需要将第一个成员移动到最后一个
                tmp_head->next = head;
                head = head->next;
                tmp_head->next->next = NULL;
            }
            break;
        }
        count++;
    }

    return head;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

投递阿里巴巴控股集团等公司7个岗位 >
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务