148 Sort List

# 148 Sort List

题目来源:

https://leetcode.com/problems/sort-list/description/

题意分析:

Sort a linked list in O(n log n) time using constant space complexity.

对一个链表进行排序,时间复杂度为O(n log n) ,空间复杂度为常量。

题目思路:

学了python之后,偷懒的机会越来越多了,直接用list.sort()的时间复杂度正是O(n log n),进行一下转换即可。

代码:

1. # Definition for singly-linked list.  

2. # class ListNode:  

3. #     def __init__(self, x):  

4. #         self.val = x  

5. #         self.next = None  

6.   

7. class Solution:  

8.     def sortList(self, head):  

9.         """ 

10.         :type head: ListNode 

11.         :rtype: ListNode 

12.         """  

13.         l=[]  

14.         trace=head  

15.         while(trace):  

16.             l.append(trace.val)  

17.             trace=trace.next  

18.               

19.         l.sort()  

20.           

21.         index=0  

22.         trace=head  

23.         while(trace):  

24.             trace.val=l[index]  

25.             index=index+1  

26.             trace=trace.next  

27.               

28.         return head  

 

提交细节:


### 对 List 进行 Sort 排序的方法 #### 1. **C# 中的 `List<T>.Sort()` 方法** 在 C# 中,`List<T>` 提供了一个内置的 `Sort()` 方法用于对列表中的元素进行排序。该方法支持多种方式来满足不同的需求[^1]。 - **默认排序** 当列表中的元素实现了 `IComparable` 接口时,可以直接调用 `Sort()` 方法完成升序排列。例如: ```csharp List<int> numbers = new List<int> { 5, 3, 8, 1 }; numbers.Sort(); Console.WriteLine(string.Join(", ", numbers)); // 输出: 1, 3, 5, 8 ``` - **自定义比较器** 可以通过传递一个 `Comparison<T>` 委托来自定义排序逻辑。例如按字符串长度降序排列: ```csharp List<string> words = new List<string> { "apple", "banana", "cherry" }; words.Sort((x, y) => y.Length.CompareTo(x.Length)); Console.WriteLine(string.Join(", ", words)); // 输出: banana, cherry, apple ``` - **Lambda 表达式** 利用 Lambda 表达式可以使代码更加简洁明了。例如按照对象属性排序: ```csharp class Person { public string Name { get; set; } public int Age { get; set; } } List<Person> people = new List<Person> { new Person { Name = "Alice", Age = 30 }, new Person { Name = "Bob", Age = 25 } }; people.Sort((p1, p2) => p1.Age.CompareTo(p2.Age)); foreach (var person in people) { Console.WriteLine($"{person.Name} ({person.Age})"); } // 输出: // Bob (25) // Alice (30) ``` --- #### 2. **Java 中的 `List.sort()` 和 `Collections.sort()` 方法** 在 Java 中,可以通过两种主要的方式对 `List` 类型的数据结构进行排序:`List.sort(Comparator<? super E> c)` 和 `Collections.sort(List<T> list)`[^2][^3]。 - **实现 `Comparable` 接口** 让列表中的对象实现 `Comparable` 接口,并重写 `compareTo` 方法即可自动完成排序。例如: ```java import java.util.*; class User implements Comparable<User> { private String name; public User(String name) { this.name = name; } @Override public int compareTo(User other) { return this.name.compareTo(other.name); } @Override public String toString() { return name; } } public class Main { public static void main(String[] args) { List<User> users = Arrays.asList(new User("Charlie"), new User("Alice"), new User("Bob")); Collections.sort(users); System.out.println(users); // 输出: [Alice, Bob, Charlie] } } ``` - **使用 Comparator 自定义排序规则** 如果不想修改原有类的设计,也可以传入一个 `Comparator` 来指定排序规则。例如按年龄倒序排列: ```java import java.util.*; class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public int getAge() { return age; } @Override public String toString() { return name + "(" + age + ")"; } } public class Main { public static void main(String[] args) { List<User> users = Arrays.asList( new User("Alice", 30), new User("Bob", 25), new User("Charlie", 35) ); users.sort((u1, u2) -> Integer.compare(u2.getAge(), u1.getAge())); System.out.println(users); // 输出: [Charlie(35), Alice(30), Bob(25)] } } ``` - **利用 Lambda 表达式简化代码** 在现代 Java 版本中,可以进一步缩短代码量。例如: ```java users.sort(Comparator.comparingInt(User::getAge).reversed()); ``` --- #### 3. **Python 中的 `list.sort()` 方法** 虽然问题未提及 Python,但作为补充说明,Python 的 `list.sort()` 同样强大且灵活。它允许通过 `key` 参数定制排序依据以及通过 `reverse` 参数控制顺序方向。例如: ```python class Person: def __init__(self, name, age): self.name = name self.age = age people = [ Person("Alice", 30), Person("Bob", 25), ] people.sort(key=lambda p: p.age) for person in people: print(f"{person.name} ({person.age})") # 输出: # Bob (25) # Alice (30) ``` --- ### 总结 无论是哪种编程语言,`List` 的排序功能都非常丰富多样。可以根据具体场景选择合适的策略——从简单的默认排序到复杂的多条件组合排序均可轻松实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值