#includeusing namespace std; typedef struct LNode { int data; struct LNode* next; }LNode, * LinkList; bool initLinkList(LinkList& L) { L = new LNode; if (!L) return false; L->next = NULL; return true; } bool destroyLinkList(LinkList& L) { LNode* p = L->next; while (L) { delete L; L = p; p = p->next; } return true; } void printLinkList(LinkList L) { while (L->next) { cout << L->next->data << " "; L = L->next; } cout << endl; } void creatLinkList_head(LinkList& L) { int n, num; cout << "输入结点个数:"; cin >> n; LNode* p; for (int i = 0; i < n; i++) { cin >> num; p = new LNode;//这句不能忘,每次有新节点就要new,又不花钱 p->data = num; p->next = L->next; L->next = p; } } void creatLinkList_tail(LinkList& L) { int n, num; cout << "输入结点个数:"; cin >> n; LNode* p; LNode* tail = L; for (int i = 0; i < n; i++) { p = new LNode;//把分配的地址返回给p指针,是LNode类型的 cin >> num; p->data = num; tail->next = p; tail = p; } tail->next = NULL; } LNode* getLinkList(LinkList L, int n) { int i=1;//注意一下下i,和求表长不一样哦 LNode* p = L->next; if (n < 0) return L; while (p&&i p = p->next; i++; } return p; } bool insertLinkList(LinkList& L, int n,int e) { LNode* p = getLinkList(L, n-1); if (!p) return false; LNode* s = new LNode; s->data = e; s->next = p->next; p->next = s; return true; } bool deleteLinkList(LinkList& L, int n) { LNode* p = getLinkList(L, n - 1); if (!p || !p->next)//完善 return false; LNode* s = p->next; p->next = s->next; delete s; return true; } int getlenLinkList(LinkList L) { int n=0; LNode* p = L->next; while (p) { n++; p = p->next; } return n; } int main() { LinkList L; initLinkList(L); creatLinkList_head(L); //creatLinkList_tail(L); printLinkList(L); int n = getlenLinkList(L); cout <<"表长:"<< n << endl; destroyLinkList(L); return 0; }



