题解 | #调整牛群顺序#
调整牛群顺序
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题目,
叮咚买菜工作强度 163人发布