链表问题,插入节点为什么程序无法正常退出?
创建一个包含学生学号、姓名、性别、年龄的链表,插入新节点时为什么无法正常退出?
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct _node{
char number[20];
char name[10];
char sex; /*f for female, m for male*/
int age;
struct _node *next;
}Node;
typedef struct _list{
Node* head;
}List;
void add(List* pList, Node student);
void print(List *pList);
int main(int argc, char const *argv[])
{
Node *head = NULL;
List list;
int c;
Node students;
char number[20];
list.head = NULL;
while(1){
scanf("%s", students.number);
if(students.number[0] == '0'){
break;
}
scanf(" %s %c %d",students.name, &students.sex, &students.age);
students.next = NULL;
add(&list, students);
}
print(&list);
scanf("%s\n", number);
Node students1;
Node *p;
Node *q;
int isfound = 0;
for( q = NULL, p = list.head; p ; q = p, p = p -> next){
if(p -> number == students.number){ // 若存在则删除这个结点
isfound = 1;
if(q){
q -> next = p -> next;
}else{
list.head = p ->next;
}
free(p);
break;
}
if(isfound == 0){ //这个学号不存在,则创建新的节点
strcpy(students1.number, number);
scanf("%s %c %d",students1.name, &students1.sex, &students1.age);
students.next = NULL;
add(&list, students1);
break;
}
else if(number[0] == '0'){
break;
}
}
return 0;
}
void add(List* pList, Node student)
{
//add to linked-list
Node *p = (Node*)malloc(sizeof(Node));
*p = student;
//find the last
Node *last = pList -> head;
if(last){
while(last -> next){
last = last -> next;
}
//attach
last -> next = p;
}else{
pList -> head = p;
}
}
void print(List *pList){
Node *p;
for(p = pList -> head; p; p = p -> next){
printf("%s %s %c %d\n",p -> number, p -> name, p -> sex, p -> age);
}
printf("\n");
}
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct _node{
char number[20];
char name[10];
char sex; /*f for female, m for male*/
int age;
struct _node *next;
}Node;
typedef struct _list{
Node* head;
}List;
void add(List* pList, Node student);
void print(List *pList);
int main(int argc, char const *argv[])
{
Node *head = NULL;
List list;
int c;
Node students;
char number[20];
list.head = NULL;
while(1){
scanf("%s", students.number);
if(students.number[0] == '0'){
break;
}
scanf(" %s %c %d",students.name, &students.sex, &students.age);
students.next = NULL;
add(&list, students);
}
print(&list);
scanf("%s\n", number);
Node students1;
Node *p;
Node *q;
int isfound = 0;
for( q = NULL, p = list.head; p ; q = p, p = p -> next){
if(p -> number == students.number){ // 若存在则删除这个结点
isfound = 1;
if(q){
q -> next = p -> next;
}else{
list.head = p ->next;
}
free(p);
break;
}
if(isfound == 0){ //这个学号不存在,则创建新的节点
strcpy(students1.number, number);
scanf("%s %c %d",students1.name, &students1.sex, &students1.age);
students.next = NULL;
add(&list, students1);
break;
}
else if(number[0] == '0'){
break;
}
}
return 0;
}
void add(List* pList, Node student)
{
//add to linked-list
Node *p = (Node*)malloc(sizeof(Node));
*p = student;
//find the last
Node *last = pList -> head;
if(last){
while(last -> next){
last = last -> next;
}
//attach
last -> next = p;
}else{
pList -> head = p;
}
}
void print(List *pList){
Node *p;
for(p = pList -> head; p; p = p -> next){
printf("%s %s %c %d\n",p -> number, p -> name, p -> sex, p -> age);
}
printf("\n");
}
...全文
相关推荐
C语言 在链表的指定位置插入节点
用C语言编写的链表中插入节点的程序,供学习参考交流用
C语言实现单向链表的创建、插入,删除节点,和2个链表合并
VC6.0下 用C语言实现单向链表的创建、插入,删除节点,和2个链表合并等操作
单链表之头部插入节点.pdf
比较适合于大学生面试公司笔试时候的基础性的数据结构考察。 在分析链表的算法的时候一定要注意心里有数, 先搞清楚完成这个算法需要 哪几步, 每步做什么, 然后再去思考每步的代码实现是什么, 否则就会只看到指 针指来指去, 很快就晕头转向了。 头插入节点的两个重要步骤: (1) 新节点的 pNext 指向原来的第一个节点的首地址, 即新节点和原来的 第一个节点 相连。 (2) 头结点的 pNext 指向新节点的首地址, 即头结点和新节点相连。 经过这两步新节点就插入了头结点和原来的第一个节点之间, 成为新的第一 个节点。
单链表的建立、插入节点、删除节点、逆序、查找等等
单链表的建立、插入节点、删除节点、逆序、查找等等,希望了可以给你们带来帮助
直接插入排序的单链表的实现
这是我的数据结构的课程设计,是“直接插入排序的单链表的实现”!


新手乐园

