读入 n 值及 n 个整数, 建立单链表并遍历输出.
输入格式:
读入 n 及 n 个整数.
输出格式:
输出 n 个整数, 以空格分隔 (最后一个数的后面没有空格).
输入样例:
在这里给出一组输入. 例如:
2 10 5
输出样例:
在这里给出相应的输出. 例如:
10 5
代码如下:
- /*
- 填空: 单链表的建立与遍历程序.
- */
- #include<iostream>
- using namespace std;
- #define OK 1
- #define ERROR 0
- typedef int Status;
- typedef int ElemType;
- typedef struct LNode{
- ElemType data; // 数据域
- struct LNode *next; // 指针域
- } LNode, *LinkList;
- Status InitList( LinkList&L); // 函数声明
- void CreateList( LinkList &L,int n); // 函数声明
- void DisplayList( LinkList ); // 函数声明
- void DestroyList( LinkList ); // 函数声明
- int main()
- {
- LinkList L; // 值传递
- InitList( L ); // 调用函数 InitList
- int n;
- cin>> n;
- CreateList( L, n );
- DisplayList( L );
- DestroyList( L );
- return 0;
- }
- Status InitList(LinkList&L)
- {
- L = new LNode ;
- L->next = NULL ;
- return OK;
- }
- void CreateList( LinkList &L,int n )
- // 尾插法建立带头结点的有 n 个元素的链表
- {
- LNode *p, *r; // 定义 p 与 r 指针
- r = L ; // 尾指针 r 指向头结点
- for( int i=0; i<n; ++i ){
- p = new LNode ; // 生成新结点 * p
- cin>> p->data; // 输入元素值
- p->next= NULL;
- r->next = p ; // 将 p 插入到表尾
- r = p; //r 指向新的尾结点
- }
- }
- void DisplayList( LinkList L )
- // 遍历带头结点的单链表
- {
- LNode *p =L->next ;
- while ( p )
- {
- if(p->next==NULL)
- {
- cout<<p->data;
- }
- else cout <<p->data<<" ";
- p=p->next;
- }
- }
- void DestroyList( LinkList L )
- {
- // 回收 L 的所有结点的空间
- LNode *p = L, *q;
- while ( p ) // 当 p 指向结点不为空
- {
- q = p->next; //q 指向 p 的下一结点
- delete p; // 回收 p 指向的结点空间
- p = q; //p 指向 q 指向的结点
- }
- }
这是单链表最基本的运用, 也是熟悉使用单链表的重要的一步
来源: http://www.bubuko.com/infodetail-2990221.html