结构的定义
struct node
{ int num;
struct node *next;
}
函数的原型:struct node *insertnode( struct node *head,int x,int num ), 其中:参数head 是单向链表的头指针;参数x 表示在第x个数据节点之后插入新节点,num是新插入节点的数据成员的值。函数的返回值是单向链表的头指针。
例如当原链表存储的数据为:1,2,3,4,5,6,7,x=3时,原链表如下图所示
删除第x=3个数据节点之后得到的结果如下图所示:
输入:链表的数据(以0表示终止),x的值
输出:新链表的数据
例如
输入:
1
2
3
4
5
0
3
输出:
1
2
4
5
提示:当x的值超过原始链表的串长,则不用删除节点,输出:X is too large!
如果需要在deletenode函数中终止程序,请使用语句:exit (0);
前置代码
- #include "stdio.h"
- #include "stdlib.h"
-
- struct node
- {
- int data;
- struct node * next;
- };
-
- typedef struct node NODE;
- typedef struct node * PNODE;
-
- void outlist( PNODE );
- void deletenode(NODE *head, int num);
-
- int main ( )
- {
- int num=1;
- PNODE head, p, newnode;
- int index = -1, value = 0;
-
- head = (PNODE)malloc( sizeof(NODE) );
- head->next = NULL;
- head->data = -1;
-
- p= head;
- while ( num!=0 )
- {
- scanf("%d", &num);
- if ( num!=0 )
- {
- newnode = (PNODE)malloc( sizeof(NODE) );
- newnode->next= NULL;
- newnode->data = num;
-
- p->next = newnode;
- p = p->next;
- }
- }
-
- scanf("%d", &value);
-
- deletenode(head, value);
- outlist(head);
- system("pause");
- return 0;
- }
-
- void outlist( PNODE head )
- { PNODE p;
- p = head->next;
- while ( p != NULL )
- { printf("%d\n", p->data);
- p = p->next;
- }
- }
-
- void deletenode(NODE *head, int num)
- {
- NODE*p=head;
-
- for(int i=0;i<num-1;i++){
- if((p->next)==NULL){
- printf("X is too large!\n");
- exit(0);
- }
- p=p->next;
- }
- NODE* q=p->next;
- if(q==NULL){
- printf("X is too large!\n");
- exit(0);//TODO
- }
- p->next=q->next;
- free(q);
- }