动手刷LeetCode--单向链表

知识点

链表:链表在内存中不连续,所以可以有效地解决内存碎片化的问题;
学链表,先学会使用画图 图解法,使思路更清晰;

链表(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;

        
    }
};

小结

多看看前人写的优秀推荐代码,融入自己脑子里面
链表以前学过就是只学却从不实践刷题,只是一味地自我感动而已
坚持,这次学知识作比较的模式就很好

发布了39 篇原创文章 · 获赞 3 · 访问量 2518

猜你喜欢

转载自blog.csdn.net/li_kin/article/details/104724147