#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct node{
    int info;
    struct node *next;
    };
typedef struct node *simpul;
void main()
    {
    simpul baru, head=NULL, tail=NULL, temp, prev;
    int pilih, hapus, cari, data;
    char jwb;
    system("clear");
    do
        {
        printf("\n");
           printf("=====================\n");
           printf("| Program Link List |\n");
           printf("=====================\n");
           printf("| 1. Insert         |\n");
           printf("| 2. View           |\n");
           printf("| 3. Search         |\n");
           printf("| 4. Delete         |\n");
           printf("| 5. Keluar         |\n");
           printf("=====================\n");
           printf("| Pilih : ");
           scanf("%d", &pilih);

           switch(pilih)
            {
                case 1:
                printf("Data masuk : ");
                scanf("%i", &data);
                baru = (simpul) malloc(sizeof (struct node));
                baru->info = data;
                baru->next = NULL;
                if (head == NULL)
                {
                    head = baru;
                    tail = baru;
                }
                else
                {
                    tail->next = baru;
                    tail = baru;
                }
                break;
                case 2:

                temp = head;
                while(temp!=NULL)

                {
                    printf("%i ", temp->info);
                    temp = temp->next;
                }

                printf("\n");
                break;

                case 3:

                printf("Cari angka : ");
                scanf("%i ", &cari);
                temp = head;

                while ((temp!=NULL)&&(temp->info!=cari))

                {
                    temp = temp->next;
                }

                if(temp != NULL && temp->info == cari)
                printf("Data yang ditemukan ");
                else //if(temp == NULL)
                printf("Data tidak ditemukan ");
                printf("\n");
                break;

                case 4:

                printf("Hapus angka : ");
                scanf("%i ", &hapus);
                temp = head;

                while((temp!=NULL)&&(temp->info!=hapus))

                {

                    prev = temp;
                    temp = temp->next;
                }

                if(temp != NULL && temp->info == hapus)

                {
                    printf("Yakin dihapus? (y/t) \n");
                    _flushall;
                    jwb=getch();
                    if(jwb == 'y')

                    {

                        if(temp->next != NULL && temp != head)
                        prev->next = temp->next;


                        else if (temp == head && head->next == NULL)

                        {
                            head = NULL;
                        }


                        else if (temp == head && head->next != NULL)

                        {
                            head = head->next;
                        }


                        else if (temp->next == NULL)

                        {
                            prev->next = NULL;
                            tail=prev;
                        }

                        free(temp);
                    }
                    else 

                    printf("| Penghapusan dibatalkan |\n");
                    printf("\n");
                }
                else

                printf("| Data tidak ditemukan |\n");
                printf("\n");
                break;
            }
    }while (pilih!=5);
    return 0;
    getch();
}