86.分隔链表

64 阅读1分钟

题目:
给你一个链表的头节点 head 和一个特定值 **x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。
解法:
遍历链表,小于x放一个list,其他放一个list,遍历结束后合并2个list

func partition(head *ListNode, x int) *ListNode {
	smallTail := new(ListNode)
	bigtail := new(ListNode)
	
	smallHead := smallTail
	bigHead := bigtail
	for head != nil {
		if head.Val < x {
			smallTail.Next = head
			smallTail = smallTail.Next
		} else {
			bigtail.Next = head
			bigtail = bigtail.Next 
		}
		head = head.Next
	}
	bigtail.Next = nil
	smallTail.Next = bigHead.Next
	return smallHead.Next
}