#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct LNode
{
int data;
struct LNode *next;
}*Lnode;
//init the single linked list
void Init_L(struct LNode *p)
{
int n;
int i = 0;
Lnode q;
Lnode linklist;
//p = (Lnode) malloc(sizeof(Lnode));
if(p == NULL)
{
puts("error!");
exit(0);
}
linklist = p;
while(p)
{
//i++;
scanf("%d", &n);
if(n == -1)
break;
q = (Lnode) malloc(sizeof(Lnode));
p->data = n;
p->next = q;
p = q;
i++;
}
q->next = NULL;
for(i; i > 0; i--)
{
printf("/n%d/n", linklist->data);
linklist = linklist->next;
}
}
//insert the single linked list
Insert_L(struct LNode *p, int i, int n)
{
int length = 0;
int j = 1;
struct LNode *linklist;
Lnode p1;
Lnode q;
linklist = p;
p1 = p;
while(p->next != NULL)
{
p = p->next;
length++;
}
printf("length:%d/n", length);
if((length < i) || (i < 1))
puts("insert postion is error");
q = (Lnode) malloc(sizeof(Lnode));
if(!q)
{
puts("malloc errored!");
exit(0);
}
while((p1->next != NULL) && (j < i - 1))
{
p1 = p1->next;
j++;
}
if((p1->next) == NULL || (j > i))
{
puts("Insert error!");
exit(0);
}
q->data = n;
q->next = p1->next;
p1->next = q;
while(linklist->next != NULL)
{
printf("%d/n", linklist->data);
linklist = linklist->next;
}
}
//delete from linklist
Delete_L(struct LNode *p, int i)
{
Lnode q = p;
Lnode q1 = p;
int j = 0;
/*
while(p->next != NULL)
{
printf("%d/n", p->data);
p = p->next;
}
exit(0);
*/
while((p->next != NULL) && (j < i - 1))
{
q1 = p;
p = p->next;
j++;
}
if((p->next == NULL) || (j > i))
{
puts("delete error!");
exit(0);
}
q1->next = p->next;
while(q->next != NULL)
{
printf("%d/n", q->data);
q = q->next;
}
}
int main(int argc, char **argv)
{
struct LNode *ll;
int i;
int n;
ll = (struct LNode *)malloc(sizeof(struct LNode));
Init_L(ll);
puts("please input the location and value of insert:");
scanf("%d %d", &i, &n);
Insert_L(ll, i, n);
puts("please input the location of delete:");
scanf("%d", &i);
Delete_L(ll, i);
return 0;
}