首页 > 代码库 > Splitting Linked List

Splitting Linked List

This is a very good linked list question, as there are tricky cases you have to consider, and getting them all right in one place is harder than it looks. It also has a very obvious simple solution, which is to iterate the list twice. The first time to count how many elements in the list, and the second time to find the splitting point.1234567891011121314void FrontBackSplit(Node *head, Node **front, Node **back) {  if (!head) return;  // Handle empty list  Node *front_last_node;  Node *slow = head;  Node *fast = head;  while (fast) {    front_last_node = slow;    slow = slow->next;    fast = (fast->next) ? fast->next->next : NULL;  }  front_last_node->next = NULL;  // ends the front sublist  *front = head;  *back = slow;}

 

Splitting Linked List