链表的中间结点
方案一
使用快慢指针
借助单链表实现
C-源代码
#include <stdlib.h>
#include "LinkList.h"
struct ListNode* middleNode(struct ListNode* head) {
struct ListNode *fast = head;
struct ListNode *slow = head;
while (fast != NULL && fast->next != NULL) {
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
void test_0876(void)
{
int arr[5] = { 5, 4, 3, 2, 1 };
struct ListNode *l1 = createNode(arr, sizeof(arr) / sizeof(arr[0]));
printNode(l1);
// struct ListNode *ret1 = middleNode(l1);
// printNode(ret1);
int arr2[6] = { 6, 5, 4, 3, 2, 1 };
struct ListNode *l2 = createNode(arr2, sizeof(arr2) / sizeof(arr2[0]));
printNode(l2);
struct ListNode *ret2 = middleNode(l2);
printNode(ret2);
}
网友评论