मैं इस प्रश्न को हल करने की कोशिश कर रहा हूं: "किसी दिए गए लिंक किए गए सूची में तत्वों को व्यवस्थित करें, जैसे कि सभी संख्याएं विषम संख्याओं के बाद भी रखी जाती हैं। तत्वों का प्रासंगिक क्रम समान होना चाहिए।"विचित्र तत्वों के बाद भी लिंक किए गए लिस्ट को
static Node<Integer> sortOddEven(Node<Integer> head) {
if(head == null || head.next == null) {
return head;
}
Node<Integer> middle = getMiddle(head);
Node<Integer> nextOfMiddle = middle.next;
middle.next = null;
Node<Integer> temp1 = sortOddEven(head);
Node<Integer> temp2 = sortOddEven(nextOfMiddle);
Node<Integer> sortedList = sortOddEvenMerger(temp1, temp2);
return sortedList;
}
static Node<Integer> sortOddEvenMerger(Node<Integer> head1, Node<Integer> head2) {
Node<Integer> head3 = null, tail3 = null;
if(head1.data.intValue()%2 != 0) {
head3 = head1;
tail3 = head1;
head1 = head1.next;
} else {
head3 = head2;
tail3 = head2;
head2 = head2.next;
}
while(head1 != null || head2 != null) {
if(head1 == null) {
tail3.next = head2;
return head3;
} else if(head2 == null){
tail3.next = head1;
return head3;
}
if(head1.data.intValue()%2 != 0) {
tail3.next = head1;
tail3 = tail3.next;
head1 = head1.next;
} else {
tail3.next = head2;
tail3 = tail3.next;
head2 = head2.next;
}
}
tail3.next = null;
return head3;
}
मूल रूप से मैं बदलाव है MergeSort
एल्गोरिथ्म एक छोटा सा यह एक हल करने के लिए, अगर मैं अजीब मुठभेड़:
class Node<T> {
T data;
Node<T> next;
Node(T data) {
this.data = data;
}
}
यह मुख्य तर्क है:
इस कोड मैं का उपयोग कर रहा है तत्व, मैं उन्हें sortOddEvenMerger
विधि में और बाद में तत्वों में भी जोड़ता हूं। लेकिन तत्वों के सापेक्ष क्रम बदल जाते हैं।
उदाहरण: इनपुट - 1 4 5 2
अपेक्षित उत्पादन - 1 5 4 2
मेरे उत्पादन - 1 5 2 4
मैं कैसे इसे और अधिक tweak बनाए रखने के लिए कर सकते हैं सापेक्ष आदेश?
निश्चित रूप से अंतिम चरण 'ओ (1)' है यदि आप विषम सूची में अंतिम 'नोड' का संदर्भ बनाए रखते हैं और यहां तक कि सूची के प्रमुख भी हैं? 'oddCurrent.next = evenHead' (बेशक चेक 'oddCurrent! = null' सुनिश्चित करने के लिए जोड़ा जाना चाहिए, जो संभव है)। मुझे लगता है कि आपने कहा था कि ओ ओ (एन) 'एक टाइपो था। –
धन्यवाद टिप्पणी !!! असल में मुझे ऐसा नहीं सोचना पड़ा क्योंकि ओ (एन) अंतिम चरण में समग्र जटिलता नहीं बदलेगा, लेकिन हाँ आप पूरी तरह से सही हैं !! (मैं जवाब फिर से संपादित कर दूंगा !!)। बड़े ओ नो के संदर्भ में – coder
, लेकिन अभ्यास में हाँ। जवाब को साफ रखने के लिए मैं एक पल में अपनी टिप्पणी हटा दूंगा, जो अन्यथा स्पॉट पर था। –