知识点
链表:链表在内存中不连续,所以可以有效地解决内存碎片化的问题;
学链表,先学会使用画图 图解法,使思路更清晰;
链表(Linked List):是一种常见的数据结构,是一种线性表,但是不是按照在内存连续的方式存储数据,而是在每一个节点里除了存放数据本身之外,还开辟了内存存放其后继点的指针;
链表的优缺点
使用链表结构可以克服数组需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大;
链表分类: 单向链表,双向链表和循环链表
解题思路
遍历比较相同下标的大小,然后比较进行交换;
比较法:逐一比较,用到循环结构
递归法:1、终止条件 2、返回值 3、本级递归内容 有点难
代码实现
Python:
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
begin = ListNode(0)
res = begin
while l1 and l2:
if l1.val < l2.val:
res.next = l1
l1 = l1.next
else:
res.next = l2
l2 = l2.next
res = res.next
res.next = l1 if l1 else l2
return begin.next
C++
/**
* Definition for singly-linked list.
* 定义用来表示链表的结构体
* 要么看懂结构体,要么懂链表结构知识
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 结构体类型加上 * 定义的类型:是什么?代表了什么
if(l1 == NULL) {
return l2;
}
if(l2 == NULL) {
return l1;
}
ListNode* ihead = new ListNode(0);
ListNode* node = ihead;
while (l1 && l2)
{
if (l1->val > l2->val) swap(l1, l2);
node->next = l1;
node = node->next;
l1 = l1->next;
}
node->next = l1 ? l1 : l2;
return ihead->next;
}
};
小结
多看看前人写的优秀推荐代码,融入自己脑子里面
链表以前学过就是只学却从不实践刷题,只是一味地自我感动而已
坚持,这次学知识作比较的模式就很好