自己保存一下,建立链表的程序,省的以后每次建立链表的时候,还需要重新在写。

通过下面的代码,建立的链表节点数为10,每个节点保存的数为其下标即:0-9

这里要注意一点,在void createList(ListNode* &pHead)的时候,用的是指针引用,因为在main中head并没有开辟空间,如果在createList中为pHead开辟空间的时候,main中的head依旧还是指向NULL的。

如果在main中为head开辟了空间的话,就不需要用指针的引用了。道理很简单,就和你传int参数是一个道理。createList中的pHead是形参,也就是说pHead的地址和main中head的地址是不一样的,如果在main中为head开辟了空间的话,那么pHead

和head所保存的地址是一样的。后面就用了第二种方法实现。

#include "stdafx.h"#include <iostream>
#include<cstring>
#include <vector>
#include <assert.h>using namespace std;struct ListNode
{    int m_key;
    ListNode* next;
};void createList(ListNode* &pHead)
{
    pHead = new ListNode;
    pHead->m_key= 0;
    pHead->next = NULL;
    ListNode* p = pHead;    for(int i=1; i<10; i++)
    {
        ListNode* pNewNode = new ListNode;
        pNewNode->m_key = i;
        pNewNode->next = NULL;
        p->next = pNewNode;
        p = pNewNode;
    }
}void destoryList(ListNode* pHead)
{
    assert(pHead!=NULL);
    ListNode* pNext = pHead->next;    while(pNext != NULL)
    {
        delete pHead;
        pHead = pNext;
        pNext = pHead->next;
    }
    delete pHead;
    pHead = NULL;    return;
}int main()
{
    ListNode* head = NULL;
    createList(head);


    destoryList(head);
}
 
void createList1(ListNode* pHead)
{
    ListNode* p = pHead;    for(int i=1; i<10; i++)
    {
        ListNode* pNewNode = new ListNode;
        pNewNode->m_key = i;
        pNewNode->next = NULL;
        p->next = pNewNode;
        p = pNewNode;
    }
}void destoryList(ListNode* pHead)
{
    assert(pHead!=NULL);
    ListNode* pNext = pHead->next;    while(pNext != NULL)
    {
        delete pHead;
        pHead = pNext;
        pNext = pHead->next;
    }
    delete pHead;
    pHead = NULL;    return;
}int main()
{
    ListNode* head = NULL;    //createList(head);
    head = new ListNode;
    head->m_key =0;
    head->next = NULL;
    createList1(head);


    destoryList(head);
}