题解 | #调整牛群顺序#
调整牛群顺序
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题目,