#include
#include
struct Node {
int data;
struct Node* next;
};
int main() {
int n, m, k, d, a;
scanf("%d", &n);
struct Node* L, *L3,*q,*head,*p,*T;
head = (struct Node*)malloc(sizeof(struct Node));
q = head;
while (n > 0) {
p = (struct Node*)malloc(sizeof(struct Node));
scanf("%d", &p->data);
q->next = p;
q = p;
n--;
}
q->next = NULL;
scanf("%d", &m);
while(m>0){
scanf("%d", &a);
T = head;
if (a == 0) {
scanf("%d %d", &k, &d);
L = (struct Node*)malloc(sizeof(struct Node));
L->data = d;
while (k >0&&T!=NULL ) {
T = T->next;
k--;
}if(T!=NULL){
L->next = T->next;
T->next = L;}
}
if (a == 1) {
scanf("%d",&k);
if(k>0&&T!=NULL){
while (k-1>0&&T!=NULL) {
k--;
T = T->next;
}
struct Node*tmp=T->next;
T->next = tmp->next;
free(tmp);}
}
m--;
}
L3 = head->next;
while (L3 != NULL) {
printf("%d ", L3->data);
L3 = L3->next;
}
printf("\n");
return 0;
}
#include
#include
struct Node {
int data;
struct Node* next;
};
int main() {
int n, m, k, d, a;
scanf("%d", &n);
struct Node* L, *L3,*q,*head,*p,*T;
head = (struct Node*)malloc(sizeof(struct Node));
q = head;
while (n > 0) {
p = (struct Node*)malloc(sizeof(struct Node));
scanf("%d", &p->data);
q->next = p;
q = p;
n--;
}
q->next = NULL;
scanf("%d", &m);
while(m>0){
scanf("%d", &a);
T = head;
if (a == 0) {
scanf("%d %d", &k, &d);
L = (struct Node*)malloc(sizeof(struct Node));
L->data = d;
while (k >0&&T!=NULL ) {
T = T->next;
k--;
}if(T!=NULL){
L->next = T->next;
T->next = L;}
}
if (a == 1) {
scanf("%d",&k);
while (k-1>0&&T!=NULL) {
k--;
T = T->next;
}if(k>0&&T!=NULL){ //只是把这边移动了一下
struct Node*tmp=T->next;
T->next = tmp->next;
free(tmp);}
}
m--;
}
L3 = head->next;
while (L3 != NULL) {
printf("%d ", L3->data);
L3 = L3->next;
}
printf("\n");
return 0;
}
是这样的,没有移动的话这个T通过while可能变为NULL了,下面在取去tmp=T->next就是指针非法访问了
tmp那一段,tmp可能变为NULL,也有可能有问题
if(k>0&&T!=NULL){
while (k-1>0&&T!=NULL) {
k--;
T = T->next;
} /*while结束的时候 T可能为NULL */
struct Node*tmp=T->next; /*当T为NULL的时候,就是指针非法访问了*/
T->next = tmp->next;/*这里还得注意下tmp是否为NULL,如果tmp为NULL也会指针非法访问了*/
free(tmp);}
}