C++链表小结

1链表结构的定义

struct ListNode 
{
    int val;//链表的值
    ListNode* next;//链表的指针
    ListNode() :val(0), next(nullptr) {};//构造函数
    ListNode(int x) :val(x), next(nullptr) {};
    ListNode(int x, ListNode* node) :val(0), next(node) {};
};

链表设计两个主要的要素,链表的值和链表的指针,设计好一个链表结构体后我们就可以创建一个链表节点:如ListNode* node = new ListNode();

2初始化一整个链表

ListNode* createListNode(int arr[],int n)
{
    if (n == 0) return nullptr;
    ListNode* dummyhead = new ListNode();
    ListNode* cur = dummyhead;
    int i = 0;
    while (n--) 
    {
        ListNode* node = new ListNode(arr[i++]);
        cur->next = node;
        cur = cur->next;
    }
    return dummyhead->next;
}

上面就是将一个数组里的数字创建为一个完整的链表,这里特别强调一下虚拟头结点的重要性。在链表的操作中,我非常的建议大家可以创建一个虚拟的头结点,这样在涉及到头结点的插入,删除等操作下会变得非常的方便。

3 链表的打印输出

void printListNode(ListNode* head) 
{
    while (head) 
    {
        cout << head->val << " ";
        head = head->next;
    }
    cout << endl;
    return;
}

将整个链表打印输出

4 链表题目应该怎么做

画图!画图!画图!重要的事情说三遍,画图是做链表题的精华,尤其是针对不太熟悉的同学来说更是如此,只要画好了一个链表的结构,我们就知道链表题目该怎么做了,因为涉及到链表的操作无非就那么几个:增,删,改,查
单链表结构图
1 在头结点增加一个节点node
node->next = head->next;
head->next = node;

2 删除头结点后的一个节点
head->next = head->next->next;

3修改节点node的值为value
node->val = value;

4查找链表中的某个节点node
while(!head)
{
if(head == node) break;
head = head->next;
}

5 常见的链表题

最经典最经典的:
1 LRU:解决思路----双向链表加哈希表
2 循环链表:快慢指针
2 翻转链表:利用一个prev节点
4 交换两个相邻的节点:考验链表基本功
5 设计链表:很考验基础能力

非常推荐把上面说到的内容做一下,做完链表部分应该会有相当大的收获!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

护栏iYTL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值