| | | | | |
#include <stdio.h>
#include <stdlib.h>

typedef int element;

typedef struct ListNode{
    element data;
    struct ListNode *link;
}ListNode;

void error(char *message){
    fprintf(stderr, "%s\n", message);
    exit(1);
}

void insert_node(ListNode *phead, ListNode *p, ListNode *new_node){
    if(phead == NULL){
        new_node->link = NULL;
        phead = new_node;
    }else if(p == NULL){
        new_node->link = phead;
        phead = new_node;
    }else{
        new_node->link = p->link;
        p->link = new_node;
    }
}

void remove_node(ListNode *phead, ListNode *p, ListNode *removed){
    if(p == NULL){
        phead = (phead)->link;
    }else{
        p->link = removed->link;
    }
    free(removed);
}

void display(ListNode *head){
    ListNode *p=head;
    while(p!=NULL){
        printf("%d->", p->data);
        p = p->link;
    }
    printf("\n");
}

ListNode *search(ListNode *head, int x){
    ListNode *p;
    p = head;
    while(p!=NULL){
        if(p->data == x) return p;
        p = p->link;
    }
    return p;
}

ListNode *concat(ListNode *head1, ListNode *head2){
    ListNode *p;
	if(head1 == NULL) return head2;
    else if(head2 == NULL) return head1;
    else{
        p = head1;
        while(p->link!=NULL){
            p = p->link;
        }
        p->link = head2;
        return head1;
    }
}

ListNode *reverse(ListNode *head){
    ListNode *p, *q, *r;
    p = head;
    q = NULL;

    while(p!=NULL){
        r = q;
        q = p;
        p = p->link;
        q->link = r;
    }
    return q;
}



int main()
{
    ListNode *list1 = NULL, *list2 = NULL;
    ListNode *p;
    p->link=list1;
    
    ListNode *p1;
    p1=(ListNode *)malloc(sizeof(ListNode));
    
    p1->data=10;
    p1->link=NULL;
    display(p1);
	
   
    return 0;
    
}