给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。(详情参见https://leetcode-cn.com/problems/partition-list/)
ADT:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
我的思路:用一条链表存放比x小得节点,再用一条存放比x大得节点,再将两条链表合并即可。
说明:思路没毛病,但在代码实现上出了问题,苦思半天终于找到bug。
bug修改前的代码:
class Solution {
public ListNode partition(ListNode head, int x) {
//声明两个链表头节点
ListNode head1 = new ListNode(0);
ListNode head2 = new ListNode(0);
//声明一个在原链表上用以移动的指针
ListNode cur = head;
//声明两个用以移动的指针
ListNode l1 = head1;
ListNode l2 = head2;
while(cur!=null){
//当前原节点的值比x小,链接在l1,否则l2
if(cur.val < x){
l1.next = cur;
l1 = l1.next;
cur = cur.next;