#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define DL 3
#define STR(n)#n
#define DIGIT_LEN_STR(n) "%" STR(n) "d"
typedef struct Node{
int data;
struct Node *next;
}Node;
Node *getNewNode(int val)
{
Node *p=(Node*)malloc(sizeof(Node));
p->data=val;
p->next =NULL;
return p;
}
Node *insert(Node *head,int pos,int val){
if(pos==0){
Node *p=getNewNode(val);
p->next=head;
return p;
}
Node *p=head;
for(int i=1;i<pos;i++)p=p->next;
Node *node=getNewNode(val);
node->next=p->next;
p->next=node;
return head;
}
void clear(Node *head){
if(head ==NULL)return;
for(Node *p=head,*q;p;p=q){
q=p->next;
free(p);
}
}
void output_linklist(Node *head,int flag){
int n=0;
for(Node *p=head;p;p=p->next){
n+=1;
}
for(int i=0;i<n;i++){
printf(DIGIT_LEN_STR(DL),i);
printf(" ");
}
printf("\n");
for(Node *p=head;p;p=p->next)
{
printf(DIGIT_LEN_STR(DL),p->data);
printf("->");
}
printf("\n");
if(flag==0)printf("\n\n");
return;
}
int find(Node *head,int val){
Node *p=head;
int n=0;
while(p){
if(p->data==val){
output_linklist(head,1);
int len=n*(DL+2)+2;
for(int i=0;i<len;i++)printf(" ");
printf("^\n");
for(int i=0;i<len;i++)printf(" ");
printf("|\n");
return 1;
}
n+=1;
p=p->next;
}
return 0;
}
int main() {
srand(time(0));
#define MAX_OP 7
Node *head=NULL;
for(int i=0;i<MAX_OP;i++){
int pos=rand()%(i+1),val=rand()%100;
printf("insert %d at %d to linklist\n",val,pos);
head=insert(head,pos,val);
output_linklist(head,val);
}
int val;
while(~scanf("%d",&val)){
if(!find(head,val)){
printf("not found\n");
}
}
clear(head);
return 0;
}