LintCode Python 简单级题目 96.链表划分
生活随笔
收集整理的這篇文章主要介紹了
LintCode Python 简单级题目 96.链表划分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原題描述:
?
給定一個單鏈表和數值x,劃分鏈表使得所有小于x的節點排在大于等于x的節點之前。
你應該保留兩部分內鏈表節點原有的相對順序。
?
您在真實的面試中是否遇到過這個題?? Yes?
樣例給定鏈表?1->4->3->2->5->2->null,并且 x=3
返回?1->2->2->4->3->5->null
?
標簽? 兩根指針?鏈表?
題目分析:
添加兩個指針,分別指向第一個大于等于X的第一個節點和小于X的第一個節點,
實際情況就是第N個節點大于等于X時,N-1個節點必然就是小于X;
由于可能節點第一個值就大于X,此時不存在N-1個節點,所以在原鏈表前新增一個節點,用于初始化鏈表循環。
此時算法復雜度O(n)。
?
""" Definition of ListNode class ListNode(object):def __init__(self, val, next=None):self.val = valself.next = next """ class Solution:"""@param head: The first node of linked list.@param x: an integer@return: a ListNode"""def partition(self, head, x):# write your code hereif head is None or head.next is None: return headnode = ListNode(-999999)node.next = headhead = nodefollow = headpre = head# 找到第一個值大于x的節點while follow is not None and follow.val < x:pre = followfollow = follow.next# 所有節點都小于x,直接返回原headif follow is None: return head.next# 遍歷鏈表,此時pre是follow的上一個節點while follow.next is not None:if follow.next.val < x:# 刪除原節點other = follow.nextfollow.next = follow.next.next# 將其值插入到pre之后tmp = pre.nextother.next = tmppre.next = otherpre = pre.nextcontinuefollow = follow.nextreturn head.next?
轉載于:https://www.cnblogs.com/bozhou/p/6945210.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的LintCode Python 简单级题目 96.链表划分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何更加简单的理解JS中的原型原型链概念
- 下一篇: python爬虫:使用Beautiful