思想就是:先创建头结点然后插入新节点,插入位置要选取在链表节点末尾处,打印节点无非就是打印一个然后指针移到下一个,(注意:链表的结尾处都是以NULL结束)
class A {
public:
//先创造一个头结点
ListNode* CreateListNode(int value)
{
ListNode* pNode = new ListNode();
pNode->m_nValue = value;
pNode->m_pNext = NULL;
return pNode;//创造头结点
}
//遍历链表中的所有结点
void PrintList(ListNode* pHead)
{
ListNode* pNode = pHead;
while (pNode != NULL)
{
cout << pNode->m_nValue << " ";
pNode = pNode->m_pNext;
}
cout << endl;
}
//往链表末尾添加结点
/*
注意这里pHead是一个指向指针的指针,在主函数中一般传递的是引用。
因为如果要为链表添加结点,那么就会修改链表结构,所以必须传递引用才能够保存修改后的结构。
*/
void AddToTail(ListNode** pHead, int value)
{
ListNode* pNew = new ListNode();//新插入的结点
pNew->m_nValue = value;
pNew->m_pNext = NULL;
if (*pHead == NULL)//空链表
{
*pHead = pNew;
}
else
{
ListNode* pNode = *pHead;
while (pNode->m_pNext != NULL) {//找到链表的末节点将新节点插入
pNode = pNode->m_pNext;
}
pNode->m_pNext = pNew;
}
}
ListNode* reverseList(ListNode* head) {//链表的反转
ListNode* cur = NULL, * pre = head;
while (pre != NULL) {
ListNode* t = pre->m_pNext;
pre->m_pNext = cur;
cur = pre;
pre = t;
}
return cur;
}
};
测试用例:
int main()
{
A* x = new A;
ListNode* pNode1 =x->CreateListNode(1);//创建一个结点
//x->PrintList(pNode1);//打印
//往链表中添加新结点
// x->AddToTail(&pNode1, 1);//为链表添加一个结点
x->AddToTail(&pNode1, 2);//为链表添加一个结点
x->AddToTail(&pNode1, 3);//为链表添加一个结点
x->AddToTail(&pNode1, 4);//为链表添加一个结点
x->AddToTail(&pNode1, 5);//为链表添加一个结点
//x->AddToTail(&pNode1, 7);//为链表添加一个结点
//打印链表
x->PrintList(pNode1);//打印
system("pause");
}