1、总结

链表类问题都是in-place,空间复杂度都是O(1)的,在所有的排序算法中,时间复杂度为O(nlogn)的有三个:

1)快速排序(不开辟空间);

2)归并排序(需要开辟O(n)的空间,但是在list问题上不开辟空间);

3)堆排序(首先需要有一个堆)。

 while里面写判断条件的时候规律:

如果接下来有head -> next,那么必须判断head是否为空,同理类推。

写链表的题目,一定要注意是否需要返回node,有些题目是void就是没有返回值的,自己经常没注意这个void就直接返回值了。

1.1、Remove Duplicates from Sorted List

https://leetcode.com/problems/remove-duplicates-from-sorted-list/#/description

移除重复元素,不全部删除!

思路:使用一个node,相等的时候就node -> next = node -> next -> next,不相等的时候node往后移位,这是个技巧,原来我的做法是使用两个指针,找到第一个不相等的节点就是node ->next.

3专题总结-链表类题目
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head == NULL){
            return head;
        }
        ListNode* node = head;
        while(node -> next != NULL){
            if(node -> val == node -> next -> val){
                node -> next = node -> next -> next;
            }
            else{
                node = node -> next;
            }
        }
        return head;
    }
};
delete Duplicates

相关文章:

  • 2021-05-13
  • 2021-07-04
  • 2020-02-25
  • 2022-12-23
  • 2021-10-23
  • 2022-12-23
  • 2021-06-07
  • 2021-10-09
猜你喜欢
  • 2022-12-23
  • 2021-06-03
  • 2021-12-10
  • 2021-07-17
  • 2021-09-06
  • 2022-12-23
  • 2022-01-14
相关资源
相似解决方案