Created
February 14, 2014 05:09
-
-
Save kballenegger/8996127 to your computer and use it in GitHub Desktop.
Find the middle node in a linked list.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // File.c | |
| // | |
| // | |
| // Created by Kenneth Ballenegger on 1/13/14. | |
| // | |
| // | |
| #include <stdlib.h> | |
| #include <stdio.h> | |
| typedef struct node_t *node_p; | |
| typedef struct node_t { | |
| int value; | |
| node_p next; | |
| } node_t; | |
| node_p new_node(int value, node_p next) { | |
| node_p node = calloc(1, sizeof(node)); | |
| node->value = value; | |
| return node; | |
| } | |
| // i'm leaking memory, i don't care. fuck it | |
| int middle_node_int(node_p node) { | |
| node_p middle_node = NULL; | |
| middle_node_int_rec(node, 0, &middle_node); | |
| return middle_node->value; | |
| } | |
| // note: does not account for lists with an even number of node, handled by int division | |
| // used internally only, returns max | |
| int middle_node_int_rec(node_p next, int count_so_far, node_p *output) { | |
| if (next->next) { | |
| int max = middle_node_int_rec(next->next, count_so_far + 1, output); | |
| if (count_so_far == max / 2) { | |
| *output = next; | |
| } | |
| return max; | |
| } else { | |
| return count_so_far; | |
| } | |
| } | |
| int main() { | |
| /* Enter your code here. Read input from STDIN. Print output to STDOUT */ | |
| // creating nodes, from last to first | |
| node_p node; | |
| node = new_node(9, NULL); | |
| node = new_node(8, node); | |
| node = new_node(7, node); | |
| node = new_node(6, node); | |
| node = new_node(5, node); | |
| node = new_node(4, node); | |
| node = new_node(3, node); | |
| node = new_node(2, node); | |
| node = new_node(1, node); | |
| return middle_node_int(node); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment