#include <stdio.h>#include <stdlib.h>struct ListNode { int val; struct ListNode* next;};void display(struct ListNode* head){ struct ListNode* current = head; while(current != NULL) { printf("%d\n", current->val); current = current->next; }}void push(struct ListNode* head, int val){ struct ListNode* current = head; while(current->next != NULL) { current = current->next; } current->next = (struct ListNode*)malloc(sizeof(struct ListNode)); current->next->val = val; current->next->next = NULL;}struct ListNode* traverse(struct ListNode* head){ if (head == NULL) { return NULL; } struct ListNode* newHead = NULL; while(head != NULL) { struct ListNode* temp = (struct ListNode*)malloc(sizeof(struct ListNode)); temp->val = head->val; if (newHead == NULL) { temp->next = NULL; } else { temp->next = newHead; } newHead = temp; head = head->next; } return newHead;}int main(int argc, char const *argv[]){ struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode)); if (head == NULL) { return 1; } head->val = 1; head->next = NULL; push(head, 2); push(head, 3); push(head, 4); push(head, 5); push(head, 6); display(head); struct ListNode* newHead = traverse(head); printf("\n"); display(newHead);}