SWUST OJ(953)

单链表的删除操作的实现

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef struct LinkNode //单链表节点结构的定义
 5 {
 6     int data;
 7     struct LinkNode *next;
 8 }LinkNode;
 9 
10 void InitLinkList(LinkNode * &L)
11 {
12     /*单链表的初始化*/
13     L = (LinkNode*)malloc(sizeof(LinkNode));
14     L->next = NULL;
15 }
16 
17 void CreateLinkList(LinkNode *&L, int n,int *num)
18 {
19     /*采用尾插法创建单链表*/
20     LinkNode* r = L;
21     for (int i = 0; i < n; ++i)
22     {
23         LinkNode * p =(LinkNode*)malloc(sizeof(LinkNode));
24         p->data = num[i];
25         p->next = r->next;
26         r->next = p;
27         r = p;
28     }
29 }
30 
31 void DisList(LinkNode *L)
32 {
33     /*单链表的输出*/
34     LinkNode *l = L->next;
35     while(l)
36     {
37         printf("%d ",l->data);
38         l = l->next;
39     }
40 }
41 
42 void DelLinkList(LinkNode *&L, int p)
43 {
44     /*删除指定参数所代表的节点*/
45     LinkNode *a = L;
46     LinkNode *b;
47     for(int i=0;i<p-2;i++)
48     {
49         a = a->next;
50     }
51     b = a->next;
52     a->next = a->next->next;
53     free(b);
54 }
55 
56 int main(int argc, char const *argv[])
57 {
58     /*int n = 5;
59     int num[]={1,2,3,4,5};*/
60     int n, p;
61     int *num;
62 
63     scanf("%d",&n);
64     num =(int*)malloc(n*sizeof(int));
65 
66     for (int i = 0; i < n; ++i)
67     {
68         scanf("%d",&num[i]);
69     }
70 
71     scanf("%d",&p);
72 
73     /*判断输入值是否合法*/
74     if(p > n || p < 2)
75     {
76         printf("error!");
77         return 0;
78     }
79 
80     LinkNode *L;
81     InitLinkList(L);
82     CreateLinkList(L,n,num);
83     DelLinkList(L,p);
84     DisList(L);
85     return 0;
86 }
原文地址:https://www.cnblogs.com/Ghost4C-QH/p/10491678.html