@@ -0,0 +1,41 @@ | |||
#include <stdio.h> | |||
struct ListNode { | |||
int val; | |||
struct ListNode *next; | |||
}; | |||
struct ListNode* middleNode(struct ListNode*); | |||
struct ListNode* middleNode(struct ListNode* head){ | |||
struct ListNode* ind = head; | |||
struct ListNode* middle = head; | |||
int on = 0; | |||
while (ind != NULL) { | |||
ind = ind->next; | |||
if (on == 0) { | |||
on = 1; | |||
} else { | |||
on = 0; | |||
middle = middle->next; | |||
} | |||
} | |||
return middle; | |||
} | |||
int main() { | |||
printf("Expected: [4, 5, 6]\n"); | |||
printf("Got:"); | |||
struct ListNode l6 = { 6, NULL }; | |||
struct ListNode l5 = { 5, &l6 }; | |||
struct ListNode l4 = { 4, &l5 }; | |||
struct ListNode l3 = { 3, &l4 }; | |||
struct ListNode l2 = { 2, &l3 }; | |||
struct ListNode linkedList = { 1, &l2 }; | |||
struct ListNode* middle = middleNode(&linkedList); | |||
while (middle != NULL) { | |||
printf(" %d ", middle->val); | |||
middle = middle->next; | |||
} | |||
printf("\n"); | |||
return 0; | |||
} |
@@ -0,0 +1,26 @@ | |||
Given a non-empty, singly linked list with head node head, return a middle node of linked list. | |||
If there are two middle nodes, return the second middle node. | |||
Example 1: | |||
Input: [1,2,3,4,5] | |||
Output: Node 3 from this list (Serialization: [3,4,5]) | |||
The returned node has value 3. (The judge's serialization of this node is [3,4,5]). | |||
Note that we returned a ListNode object ans, such that: | |||
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL. | |||
Example 2: | |||
Input: [1,2,3,4,5,6] | |||
Output: Node 4 from this list (Serialization: [4,5,6]) | |||
Since the list has two middle nodes with values 3 and 4, we return the second one. | |||
Note: | |||
The number of nodes in the given list will be between 1 and 100. | |||
@@ -0,0 +1,5 @@ | |||
#!/bin/bash | |||
gcc -o main main.c | |||
./main | |||
rm main |