下面的代码是在VS2010中运行过的,是单链表的两种构造方法:头插法与尾插法。
#include "stdafx.h" #include <iostream> #include <cstdlib> #include <cstdio> using namespace std; struct ListNode { int m_nValue; ListNode * m_pNext; }; //头插法,从头部插入,即最后输入的元素为单链表的第一个元素 ListNode *CreateList() { ListNode *node = NULL; ListNode *s; int value; cin >> value; while(value != 000) { s = new ListNode(); s->m_nValue = value; s->m_pNext = node; node = s; cin >> value; } return node; } //尾插法 ListNode *CreateList_End() { ListNode *head, *p, *s; int value; head = NULL; s = NULL; cin >> value; while(value != 000) { p = new ListNode(); p->m_nValue = value; if(head == NULL) //先判断输入的是不是第一个节点 { head = p; } else { s->m_pNext = p; //e始终指向输入的最后一个节点 } s = p; cin >> value; } if(s != NULL) //如果链表不为空,则最后节点的下一个节点为空 { s->m_pNext = NULL; } return head; //尾插法比头插法复杂一些,程序中要做两次判断,分别是判断第一个节点和最后一个节点的判断。且消耗多一个指针变量e。 } void print(ListNode *node) { ListNode *p; if (node == NULL) { cout << "空表" << endl; } else { p = node; while(p) { cout << p->m_nValue << " "; p = p->m_pNext; } cout << endl; } return; } int main() { ListNode * node = NULL; cout << "请输入数据元素,以000结束" << endl; node = CreateList_End(); print(node); system("PAUSE"); return 0; }