[LeetCode-面试02.04]分割链表

一.题目:

编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。

示例:
输入: head = 3->5->8->5->10->2->1, x = 5
输出: 3->1->2->10->5->5->8

二.题解:

1.第一种方法:

(1)解题思路:
  • 先创建两个头结点分别用于连接小于部分和大于等于部分
  • 遍历该链表,若当前结点小于x,将其插到小于的链表上否则插到大于链表上。
  • 遍历完毕后,将大于等于部分链表的连到小于部分的后面即可
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode preHead = new ListNode(-1);
ListNode nextHead = new ListNode(-1);
ListNode preCurrent = preHead;
ListNode nextCurrent = nextHead;
ListNode current = head;

while(current != null){
if(current.val < x){
preCurrent.next = current;
preCurrent = preCurrent.next;
}else{
nextCurrent.next = current;
nextCurrent = nextCurrent.next;
}
current = current.next;
}
preCurrent.next=nextHead.next;
nextCurrent.next=null;

return preHead.next;
}
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2021 Movle
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信