结构的定义
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);
预设代码
前置代码
- /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
- /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
- #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;
- }
- }
- /* This is an example for list. Please programme your code like it.
- void deletenode(NODE *head, int num)
- {
- ......
- }
- /* PRESET CODE END - NEVER TOUCH CODE ABOVE */
#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); }