师--链表的结点插入
Problem Description
Input
Output
Sample Input
4 1 1 1 2 0 3 100 4
Sample Output
3 1 2 4
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
}*head;
int len;
void sert(int mi, int xi)
{
struct node *p, *q;
int i;
p = head;
for(i = 1; i <= mi && i <= len; i++)
{
p = p-> next;
}
q = (struct node *)malloc(sizeof(struct node));
q-> data = xi;
q-> next = p-> next;
p-> next = q; //类似于逆序建立链表,因为是要找到那个结点并且要在后面插入
len++;
}
void print()
{
int i;
struct node *p;
p = head-> next;
for(i = 1; i <= len; i++)
{
if(i == 1)
{
printf("%d", p-> data);
}
else
{
printf(" %d", p-> data);
}
p = p-> next;
}
printf("\n");
}
int main(void)
{
int i, n, xi, mi;
head = (struct node*)malloc(sizeof(struct node));
head-> next = NULL;
while(~scanf("%d", &n))
{
len = 0;
for(i = 1; i <= n; i++)
{
scanf("%d %d", &mi, &xi);
sert(mi, xi);
}
print();
}
return 0;
}
法二:
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
int len;
void insert(struct node *head, int mi, int xi)
{
struct node *p, *q;
int i;
p = head;
for(i = 1; i <= len && i <= mi; i++)
{
p = p-> next;
}
q = (struct node *)malloc(sizeof(struct node));
q-> data = xi;
q-> next = p-> next;
p-> next = q;
len++;
}
void print(struct node *head)
{
int i;
struct node *p;
p = head-> next;
for(i = 1; i <= len; i++)
{
if(i == 1)
{
printf("%d", p-> data);
}
else
{
printf(" %d", p-> data);
}
p = p-> next;
}
printf("\n");
}
int main(void)
{
int i, n, xi, mi;
struct node *head;
while(~scanf("%d", &n))
{
head = (struct node *)malloc(sizeof(struct node));
head-> next = NULL;
len = 0;
for(i = 1; i <= n; i++)
{
scanf("%d %d", &mi, &xi);
insert(head, mi, xi);
}
print(head);
}
return 0;
}