鏈表 奇偶鏈表

2020-06-20 14:56 更新

題目

給定一個單鏈表,把所有的奇數(shù)節(jié)點和偶數(shù)節(jié)點分別排在一起。請注意,這里的奇數(shù)節(jié)點和偶數(shù)節(jié)點指的是節(jié)點編號的奇偶性,而不是節(jié)點的值的奇偶性。

請嘗試使用原地算法完成。你的算法的空間復(fù)雜度應(yīng)為 O(1),時間復(fù)雜度應(yīng)為 O(nodes),nodes 為節(jié)點總數(shù)。

示例 1:

輸入: 1->2->3->4->5->NULL 輸出: 1->3->5->2->4->NULL

示例 2:

輸入: 2->1->3->5->6->4->7->NULL 輸出: 2->3->6->7->1->5->4->NULL

說明:

應(yīng)當(dāng)保持奇數(shù)節(jié)點和偶數(shù)節(jié)點的相對順序。 鏈表的第一個節(jié)點視為奇數(shù)節(jié)點,第二個節(jié)點視為偶數(shù)節(jié)點,以此類推。

題解一:JAVA

1.利用head指向頭部,odd指向next,even指向雙數(shù)

2.迭代

3.返回head?

因為鏈表的等于之后是由雙方一起操作這條鏈。

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode() {}
  7. * ListNode(int val) { this.val = val; }
  8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12. public ListNode oddEvenList(ListNode head) {
  13. if (head==null) return null;
  14. ListNode odd=head,even=head.next,evenHead=even;
  15. while (even!=null&&even.next!=null){
  16. odd.next=even.next;
  17. odd=odd.next;
  18. even.next=odd.next;
  19. even=even.next;
  20. }
  21. odd.next=evenHead;
  22. return head;
  23. }
  24. }

題解二:C++

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* oddEvenList(ListNode* head) {
  12. ListNode *curr = NULL;
  13. if (head == NULL || head->next == NULL || head->next->next == NULL)
  14. return head;
  15. ListNode *evenHead = head->next, *oddHead = head, *evenLast = evenHead, *oddLast = oddHead;
  16. curr = head->next->next;
  17. bool oddFalg = true;
  18. while (curr != NULL){
  19. if (oddFalg){
  20. oddLast->next = curr;
  21. oddLast = curr;
  22. } else {
  23. evenLast->next = curr;
  24. evenLast = curr;
  25. }
  26. curr = curr->next;
  27. oddFalg = !oddFalg;
  28. }
  29. oddLast->next = evenHead;
  30. evenLast->next = NULL;
  31. return oddHead;
  32. }
  33. };
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號