<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          鏈表思維題:給按照絕對值排序的鏈表排序

          共 807字,需瀏覽 2分鐘

           ·

          2022-02-07 12:14

          題目描述

          給你一個鏈表的頭結(jié)點?head?,這個鏈表是根據(jù)結(jié)點的絕對值進行升序排序, 返回重新根據(jù)節(jié)點的值進行升序排序的鏈表。

          示例 1:

          51bde4e5bc59ca7fcef8cd13c1c34b35.webp

          輸入:?head?=?[0,2,-5,5,10,-10]
          輸出:?[-10,-5,0,2,5,10]
          解釋:
          根據(jù)結(jié)點的值的絕對值排序的鏈表是?[0,2,-5,5,10,-10].
          根據(jù)結(jié)點的值排序的鏈表是?[-10,-5,0,2,5,10].

          示例 2:

          39ef42d75757b02a6681412a853a2d60.webp

          輸入:?head?=?[0,1,2]
          輸出:?[0,1,2]
          解釋:
          這個鏈表已經(jīng)是升序的了。

          示例 3:

          輸入:?head?=?[1]
          輸出:?[1]
          解釋:
          這個鏈表已經(jīng)是升序的了。

          提示:

          ?鏈表節(jié)點數(shù)的范圍是?[1, 10^5].?-5000 <= Node.val <= 5000?head?是根據(jù)結(jié)點絕對值升序排列好的鏈表.

          進階:

          ?你可以在?O(n)?的時間復(fù)雜度之內(nèi)解決這個問題嗎?

          解法

          先默認(rèn)第一個點已經(jīng)排序完畢。然后從第二個點開始,遇到值為負(fù)數(shù)的節(jié)點,采用頭插法;非負(fù)數(shù),則繼續(xù)往下遍歷即可。

          時間復(fù)雜度?O(n)。

          Python3

          #?Definition?for?singly-linked?list.
          #?class?ListNode:
          #?????def?__init__(self,?val=0,?next=None):
          #?????????self.val?=?val
          #?????????self.next?=?next
          class?Solution:
          ????def?sortLinkedList(self,?head:?Optional[ListNode])?->?Optional[ListNode]:
          ????????prev,?curr?=?head,?head.next
          ????????while?curr:
          ????????????if?curr.val?0:
          ????????????????t?=?curr.next
          ????????????????prev.next?=?t
          ????????????????curr.next?=?head
          ????????????????head?=?curr
          ????????????????curr?=?t
          ????????????else:
          ????????????????prev,?curr?=?curr,?curr.next
          ????????return?head

          Java

          /**
          ?*?Definition?for?singly-linked?list.
          ?*?public?class?ListNode?{
          ?*?????int?val;
          ?*?????ListNode?next;
          ?*?????ListNode()?{}
          ?*?????ListNode(int?val)?{?this.val?=?val;?}
          ?*?????ListNode(int?val,?ListNode?next)?{?this.val?=?val;?this.next?=?next;?}
          ?*?}
          ?*/

          class?Solution?{
          ????public?ListNode?sortLinkedList(ListNode?head)?{
          ????????ListNode?prev?=?head,?curr?=?head.next;
          ????????while?(curr?!=?null)?{
          ????????????if?(curr.val?0)?{
          ????????????????ListNode?t?=?curr.next;
          ????????????????prev.next?=?t;
          ????????????????curr.next?=?head;
          ????????????????head?=?curr;
          ????????????????curr?=?t;
          ????????????}?else?{
          ????????????????prev?=?curr;
          ????????????????curr?=?curr.next;
          ????????????}
          ????????}
          ????????return?head;
          ????}
          }

          C++

          /**
          ?*?Definition?for?singly-linked?list.
          ?*?struct?ListNode?{
          ?*?????int?val;
          ?*?????ListNode?*next;
          ?*?????ListNode()?:?val(0),?next(nullptr)?{}
          ?*?????ListNode(int?x)?:?val(x),?next(nullptr)?{}
          ?*?????ListNode(int?x,?ListNode?*next)?:?val(x),?next(next)?{}
          ?*?};
          ?*/

          class?Solution?{
          public:
          ????ListNode*?sortLinkedList(ListNode*?head)?{
          ????????ListNode*?prev?=?head;
          ????????ListNode*?curr?=?head->next;
          ????????while?(curr)
          ????????{
          ????????????if?(curr->val?0)
          ????????????{
          ????????????????auto?t?=?curr->next;
          ????????????????prev->next?=?t;
          ????????????????curr->next?=?head;
          ????????????????head?=?curr;
          ????????????????curr?=?t;
          ????????????}
          ????????????else
          ????????????{
          ????????????????prev?=?curr;
          ????????????????curr?=?curr->next;
          ????????????}
          ????????}
          ????????return?head;
          ????}
          };

          Go

          /**
          ?*?Definition?for?singly-linked?list.
          ?*?type?ListNode?struct?{
          ?*?????Val?int
          ?*?????Next?*ListNode
          ?*?}
          ?*/

          func?sortLinkedList(head?*ListNode)?*ListNode?{
          ????prev,?curr?:=?head,?head.Next
          ????for?curr?!=?nil?{
          ????????if?curr.Val?0?{
          ????????????t?:=?curr.Next
          ????????????prev.Next?=?t
          ????????????curr.Next?=?head
          ????????????head?=?curr
          ????????????curr?=?t
          ????????}?else?{
          ????????????prev,?curr?=?curr,?curr.Next
          ????????}
          ????}
          ????return?head
          }



          推薦閱讀

          ?MQ 消息積壓問題與解決方案?MQ 消息錯亂問題與解決方案?MQ 消息丟失問題與解決方案?MQ 消息重復(fù)消費問題與解決方案?火山引擎違反 Apache 2.0 許可證:以非法方式重新發(fā)行了 SkyWalking

          長按識別下圖二維碼,關(guān)注公眾號「Doocs 開源社區(qū)」,第一時間跟你們分享好玩、實用的技術(shù)文章與業(yè)內(nèi)最新資訊。



          瀏覽 61
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一集黄色毛片 | 怡春院首页 | 日韩专区第一页。日韩中文字幕在线亚洲 | 日本久久大香蕉 | 三级视频网站在线观看 |