LeetCode-086-分隔链表

分隔链表

题目描述:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例说明请见LeetCode官网。
【LeetCode-086-分隔链表】来源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:链表遍历
声明2个链表lessThan和moreThan分别存放小于x的节点和不小于x的节点,然后2个指针curLess和curMore分别指向lessThan和moreThan的头节点,然后遍历链表head:
  • 如果当前节点小于x,则将当前节点添加到lessThan链表中;
  • 如果当前节点不小于x,则将当前节点添加到moreThan链表中。
链表head遍历完成后,将lessThan和moreThan的尾结点都指向null,避免出现多余的节点,然后将lessThan的尾结点指向moreThan的头结点(即将小于x的节点挪到不小于x的节点的前面),最后返回lessThan的next节点即为最后结果。
public class LeetCode_086 { public static ListNode partition(ListNode head, int x) { // 小于x的链表节点 ListNode lessThan = new ListNode(-1); // 不小于x的链表节点 ListNode moreThan = new ListNode(-1); ListNode curLess = lessThan, curMore = moreThan; while (head != null) { if (head.val < x) { // 小于x的节点添加到链表lessThan中 curLess.next = head; curLess = curLess.next; } else { // 不小于x的节点添加到链表moreThan中 curMore.next = head; curMore = curMore.next; } head = head.next; } // 所有节点遍历完成后将lessThan和moreThan尾结点指向null curLess.next = null; curMore.next = null; // 将小于x的节点挪到不小于x的节点的前面 curLess.next = moreThan.next; return lessThan.next; }public static void main(String[] args) { ListNode head = new ListNode(1); head.next = new ListNode(4); head.next.next = new ListNode(3); head.next.next.next = new ListNode(2); head.next.next.next.next = new ListNode(5); head.next.next.next.next.next = new ListNode(2); ListNode result = partition(head, 3); while (result != null) { System.out.print(result.val + " "); result = result.next; } } }

【每日寄语】 这一生,坎坷太多了,困难也太多了,但人的潜能是无限的,永远不要在困难的时候想这就是自己最困难的时候,只要你咬紧牙根坚持,你的梦想就会成真。

    推荐阅读