7-5 单向链表的创建与输出
本题目要求补充两个函数,实现如下功能:
输入若干个正整数,以-1结束,采取向链表中添加节点的方式来建立一个单链表,并输出这个单链表。
向链表尾部添加节点函数:
Link AppendNode(Link head,int data);
其中Link结构定义如下:
typedef struct link
{
int data;
struct link *next;
}*Link;
head
:链表头指针,如果head为NULL,则会新建头节点data
:要添加的节点数据值函数返回值
:添加节点后的链表头指针
输出链表函数:
void DisplyNode(Link head);
head
:链表头指针
主函数样例:
#include <stdio.h>
#include <stdlib.h>
typedef struct link
{
int data;
struct link *next;
}*Link;
Link AppendNode(Link head,int data);
void DisplyNode(Link head);
int main()
{
int data;
Link head = NULL;
while (1)
{
scanf("%d",&data);
if (data==-1)
break;
head = AppendNode(head,data);
}
DisplyNode(head);
return 0;
}
/*在此实现 AppendNode函数 */
/*在此实现DisplyNode函数 */
输入格式:
从键盘输入若干个正整数(空格分隔),以-1结束。
输出格式:
依次输出单链表中各个节点的数据元素值,元素间以逗号分隔。如果链表为空,则输出NULL。参看输出样例。
输入样例:
1 3 5 7 9 -1
结尾无空行
输出样例:
1,3,5,7,9
结尾无空行
输入样例:
-1
结尾无空行
输出样例:
NULL
结尾无空行
#include <stdio.h>
#include <stdlib.h>
typedef struct link
{
int data;
struct link* next;
}*Link;
Link pre, p;
Link AppendNode(Link head, int data);
void DisplyNode(Link head);
int main()
{
int data;
Link head = NULL;
while (1)
{
scanf("%d", &data);
if (data == -1)
break;
head = AppendNode(head, data);
}
DisplyNode(head);
return 0;
}
Link AppendNode(Link head, int data)
{
if (head == NULL)
{
head = new link;
head->next = NULL;
pre = head;
}
p = new link;
p->data = data;
p->next = NULL;
pre->next = p;
pre = p;
return head;
}
void DisplyNode(Link head)
{
bool a=0;
Link l = head; if (l == NULL)printf("NULL");
else {
l = l->next;
while (l != NULL) { if(a)printf(",");printf("%d", l->data);a=1;l = l->next; }
}
}
基础题目,自己给head开了空间逃避head为NULL的问题。