摘要:最后將奇數(shù)鏈表尾連到偶數(shù)鏈表頭即可。改進的思路在于減少額外的變量創(chuàng)建。奇數(shù)指針的初始值為,而偶數(shù)指針的初始值為。則下一個奇數(shù)值位于上,此時將該奇數(shù)指針移動到上之后,偶數(shù)指針的值則為。
題目要求
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes. You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity. Example: Given 1->2->3->4->5->NULL, return 1->3->5->2->4->NULL. Note: The relative order inside both the even and odd groups should remain as it was in the input. The first node is considered odd, the second node even and so on ...
將一個鏈表中的節(jié)點按照奇數(shù)位上的節(jié)點在前,偶數(shù)位上的節(jié)點在后重新排序。這里需要注意的是節(jié)點之間的相對順序不可以改變。即1->2->3->4不可以變?yōu)?b>1->3->4->2,只能是1->3->2->4。
思路和代碼首先想到的就是直接新建兩個鏈表頭分別用來從原始的鏈表中提取奇數(shù)位上的節(jié)點和偶數(shù)位上的節(jié)點。最后將奇數(shù)鏈表尾連到偶數(shù)鏈表頭即可。
public ListNode oddEvenList(ListNode head) { if(head == null || head.next == null) return head; ListNode dummyOdd = new ListNode(0); ListNode dummyEven = new ListNode(0); ListNode cur = head, odd = dummyOdd, even = dummyEven; int count = 0; while(cur!=null){ if(count%2==0){ odd.next = cur; odd = odd.next; cur = cur.next; }else{ even.next = cur; even = even.next; cur = cur.next; } count++; } odd.next = dummyEven.next; even.next = null; return dummyOdd.next; }
改進的思路在于減少額外的變量創(chuàng)建。這里我們其實可以借鑒雙指針的思路。偶數(shù)指針一次前進兩位,奇數(shù)指針一次前進兩位。奇數(shù)指針odd的初始值為head,而偶數(shù)指針even的初始值為head.next。則下一個奇數(shù)值位于even.next上,此時將該奇數(shù)指針移動到even.next上之后,偶數(shù)指針的值則為odd.next。
public ListNode oddEvenList2(ListNode head) { if(head==null) return head; ListNode odd,even,evenStart; odd=head; even=head.next; evenStart=even; while(even!=null && even.next!=null){ odd.next=even.next; odd=odd.next; even.next=odd.next; even=even.next; } odd.next=evenStart; return head; }
想要了解更多開發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號!將會不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68814.html
Problem Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes. You should try to do ...
摘要:給定一個單鏈表,把所有的奇數(shù)節(jié)點和偶數(shù)節(jié)點分別排在一起。鏈表的第一個節(jié)點視為奇數(shù)節(jié)點,第二個節(jié)點視為偶數(shù)節(jié)點,以此類推。需要記錄偶數(shù)位節(jié)點的第一個節(jié)點,因為這是偶數(shù)鏈表的頭節(jié)點,最后拼接鏈表時要用奇數(shù)鏈表的尾節(jié)點連接該節(jié)點。 ?給定一個單鏈表,把所有的奇數(shù)節(jié)點和偶數(shù)節(jié)點分別排在一起。請注意,這里的奇數(shù)節(jié)點和偶數(shù)節(jié)點指的是節(jié)點編號的奇偶性,而不是節(jié)點的值的奇偶性。 請嘗試使用原地算法完成...
摘要:給定一個單鏈表,把所有的奇數(shù)節(jié)點和偶數(shù)節(jié)點分別排在一起。鏈表的第一個節(jié)點視為奇數(shù)節(jié)點,第二個節(jié)點視為偶數(shù)節(jié)點,以此類推。需要記錄偶數(shù)位節(jié)點的第一個節(jié)點,因為這是偶數(shù)鏈表的頭節(jié)點,最后拼接鏈表時要用奇數(shù)鏈表的尾節(jié)點連接該節(jié)點。 ?給定一個單鏈表,把所有的奇數(shù)節(jié)點和偶數(shù)節(jié)點分別排在一起。請注意,這里的奇數(shù)節(jié)點和偶數(shù)節(jié)點指的是節(jié)點編號的奇偶性,而不是節(jié)點的值的奇偶性。 請嘗試使用原地算法完成...
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and notthe value in the nodes.You should try to do it in plac...
Problem Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes. Example Example:Given...
閱讀 2240·2023-04-26 01:57
閱讀 3266·2023-04-25 16:30
閱讀 2338·2021-11-17 09:38
閱讀 1090·2021-10-08 10:14
閱讀 1395·2021-09-23 11:21
閱讀 3693·2019-08-29 17:28
閱讀 3465·2019-08-29 15:27
閱讀 955·2019-08-29 13:04