定义
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
C++写法 包含值与next指针 由于指向自身,所以是自身类型
链表增加函数
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; //需要temp节点从头开始向后遍历
while(pNode->m_pNext != NULL)
{
pNode = pNode->m_pNext;
}
pNode->m_pNext = pNew;
}
}
必须使用二级指针,否则函数消亡链表消亡,当然另一种写法返回链表指针
ListNode * Add(...)
step
创建一个新加入链表节点
判链表是否为空
新建链表指针 pNode 遍历链表定位到链表尾部
将新节点加入
链表show函数
void Show(ListNode** pHead)
{
ListNode*pNode = *pHead;
while(pNode!=NULL)
{
cout << pNode->m_nValue <<" ";
pNode = pNode->m_pNext;
}
}
这里可以用二级指针也可以用一级指针。因为这里不需要返回。
写法2
void Show(ListNode* pHead)
{
ListNode *pNode = pHead;
while(pNode!=NULL)
{
cout << pNode->m_nValue <<" ";
pNode = pNode->m_pNext;
}
}
完整测试用例
#include<iostream>
using namespace std;
//struct 不声明属性为public class 不声明为private
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
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; //需要temp节点从头开始向后遍历
while(pNode->m_pNext != NULL)
{
pNode = pNode->m_pNext;
}
pNode->m_pNext = pNew;
}
}
void Show(ListNode* pHead)
{
ListNode *pNode = pHead;
while(pNode!=NULL)
{
cout << pNode->m_nValue <<" ";
pNode = pNode->m_pNext;
}
}
//二级指针 创建链表
int main()
{
ListNode* head=NULL;
AddToTail(&head,3);
Show(head);
cout<<endl;
cout<<"------------- after add 4 2"<<endl;
AddToTail(&head,4);
AddToTail(&head,2);
Show(head);
}