剑指offer刷题笔记六:从尾到头打印链表(前导文章 之 一文搞懂C++单向链表)

注:本文是对链接: 剑指offer刷题笔记六:从尾到头打印链表(正式).的前导说明,意在简要说明链表的基本内含。

学习是循序渐进的过程,以下从主要五个方面,初步介绍链表结构:

  1. 链表的定义
struct ListNode {
	int m_nValue;
	ListNode* m_pNext;
};

链表主要由两部分构成,数据部分和指针部分,数据代表本结点的数据值,指针表示下一个结点。
2. 链表的创建

ListNode* CreateListNode(int value) {
	ListNode* pNode = new ListNode();
	pNode->m_nValue = value;
	pNode->m_pNext = nullptr;

	return pNode;
}

创建结点时,首先给定一个数据值,作为参数传入,然后将指针部分初始化为nullptr。
3. 链表的连接

void ConnectListNodes(ListNode* pCurrent, ListNode* pNext) {
	if (pCurrent == nullptr)//判断当前结点是否有效
	{
		printf("Error to connect two nodes.\n");
		exit(1);
	}

	pCurrent->m_pNext = pNext;
}

链表的连接操作其实就是更改结点的指针部分的地址,将两个两个的结点连接起来。使得前一个结点的指针指向后一个结点的地址。(很容易发现,最后一个结点的指针部分将为nullptr)
4. 链表的打印

void PrintList(ListNode* pHead)
{
	printf("PrintList starts.\n");

	ListNode* pNode = pHead;//创建一个新的结点,避免修改链表
	while (pNode != nullptr)
	{
		printf("%d\t", pNode->m_nValue);
		pNode = pNode->m_pNext;
	}

	printf("\nPrintList ends.\n");
}

从链表头开始,通过“pNode”变量来访问每一个结点,并将其通过while打印输出。
5. 链表的销毁

void DestroyList(ListNode* pHead)
{
    ListNode* pNode = pHead;
    while(pNode != nullptr)
    {
        pHead = pHead->m_pNext;
        delete pNode;
        pNode = pHead;
    }
}

通过变量“pNode”来储存当前结点的地址,然后进行“pHead”的移动,“pHead”移动成功后,此时pHead已指向下一个结点了,删除“pNode”所指向空间的内存,然后继续给pNode赋值…照此循环。

最后再来看一看,主函数中链表的使用:

int main()
{
    std::cout << "Test begins!\n";
    ListNode* pNode1 = CreateListNode(1);
    ListNode* pNode2 = CreateListNode(2);
    ListNode* pNode3 = CreateListNode(3);//创建结点

    ConnectListNodes(pNode1, pNode2);
    ConnectListNodes(pNode2, pNode3);//连接结点
    
    PrintList(pNode1);//打印链表
    DestroyList(pNode1);//销毁链表
}

至此,链表的基本使用也就搞定了,至于插入结点,删除结点等操作,只需要灵活改变指针的指向,并且释放内存,即可完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherries Man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值