這個題主要考察的是排序思想的應用,雖然可能大部分都知道陣列上的排序,但是如果用到鍊錶上,
可能有些人可能就會有人一時想不起來,這道題要求o(nlogn)的演算法,所以考慮快排,歸併,堆排,
堆排個人認為不怎麼好寫,這裡不做考慮,主要講一下快排,歸併,以及一種直接呼叫庫函式的寫法。
首先講一下最簡單的使用庫函式的方法,可以說是個投機取巧的方法,直接看**:
然後是快排的寫法,用了快排的思想,以及交換值:class solution
vectorv;
for(listnode* p=head;p;p=p->next)
sort(v.begin(),v.end());
int i=0;
for(listnode* p=head;p;p=p->next)
return head;
}};
class solution
sortlist(head,null);
return head;
}void sortlist(listnode *head,listnode *tail)
listnode* partition(listnode *node,listnode *tail)
next=next->next;
}swap(cur->val,node->val);
return cur;
}};
歸併的話,主要是歸併的思想加上設定一快一慢倆個指標找到鍊錶的中點。
class solution
listnode *fast=head->next,*slow=head;
while(fast!=null&&fast->next!=null)
listnode* head2=slow->next;
slow->next=null;
listnode *p1=sortlist(head);
listnode *p2=sortlist(head2);
listnode *p=merge(p1,p2);
return p;
}listnode* merge(listnode* p1,listnode* p2)
else
return phead;
}};
leetcode 鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...
leetcode 鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 利用快慢指標找到中間節點,當快指標走到末尾時,慢指標指向中間節點 交中間節點之後的節點進行鍊錶反轉 設定指標p1從h...
分隔鍊錶(鍊錶 LeetCode)
題目鏈結 給你乙個鍊錶和乙個特定值 x 請你對鍊錶進行分隔,使得所有小於 x 的節點都出現在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5維護兩個鍊錶,乙個鍊錶儲存比x小的結點,另乙個鍊錶儲...