分隔链表
难度:中等
题目描述
给你一个链表的头节点 head
和一个特定值 x
,请你对链表进行分隔,使得所有 小于 x
的节点都出现在 大于或等于 x
的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例1
origin_url=%2Fimages%2Fltc0086_1.jpg&pos_id=img-L6P08bQy-1706332388111)
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
示例2
输入:head = [2,1], x = 2
输出:[1,2]
题解
来用两个链表进行拼接,如果比目标值小就添加到第一个链表,比目标值大或与目标值相等就添加到第二个链表,最后将两个链表拼接
想法代码
public class ListNode
{
public int val;
public ListNode next;
public ListNode(int val = 0, ListNode next = null)
{
this.val = val;
this.next = next;
}
}
class Solution
{
public static void Main(string[] args)
{
ListNode head = new ListNode(1)
{
next = new ListNode(4)
{
next = new ListNode(3)
{
next = new ListNode(2)
{
next = new ListNode(5)
{
next = new ListNode(2)
}
}
}
}
};
Solution solution = new Solution();
ListNode ans = solution.Partition(head, 2);
while (ans != null)
{
Console.WriteLine(ans.val);
ans = ans.next;
}
}
public ListNode Partition(ListNode head, int x)
{
ListNode ans = head;
ListNode temp1 = new ListNode();
ListNode temp2 = new ListNode();
ListNode s1 = temp1,s2 = temp2;
while (ans != null)
{
if (ans.val < x)
{
s1.next = ans;
s1 = s1.next;
}
else
{
s2.next = ans;
s2 = s2.next;
}
ans = ans.next;
}
s1.next = temp2.next;
s2.next = null;
return temp1.next;
}
}