最近我遇到了這個問題。我無法解決它,它是在啃我。我的代碼不起作用,我不明白我哪裏出錯了。以最有效的方式合併兩個排序後的鏈表
//Program to merge two sorted linked lists.
public class LLMergeSort{
static Node head1;
static Node head2;
static Node newHead;
static class Node{
int data;
Node next;
Node(int d){data=d;next=null;}
}
public static void merge(Node head1,Node head2,Node newHead){
Node curr1 = head1;
Node curr2 = head2;
while(curr1!=null && curr2!=null){
if(curr1.data<curr2.data){
Node new_node = new Node(curr1.data);
new_node.next = newHead;
newHead = new_node;
curr1 = curr1.next;
}
else{
Node new_node = new Node(curr2.data);
new_node.next = newHead;
newHead = new_node;
curr2 = curr2.next;
}
}
if(curr1==null){
while(curr2!=null){
Node new_node = new Node(curr2.data);
new_node.next = newHead;
newHead = new_node;
curr2 = curr2.next;
}
}
else if(curr2==null){
while(curr1!=null){
Node new_node = new Node(curr1.data);
new_node.next = newHead;
newHead = new_node;
curr1 = curr1.next;
}
}
print(newHead);
}
private static void print(Node newHead){
Node curr = newHead;
System.out.println("Linked list after merging both the lists : ");
while(curr!=null){
System.out.print("["+curr.data+"]->");
curr = curr.next;
}
System.out.print("NULL");
System.out.println();
}
public static void main(String[] args) {
LLMergeSort ll1 = new LLMergeSort();
ll1.head1 = new Node(11);
ll1.head1.next = new Node(10);
ll1.head1.next.next = new Node(8);
ll1.head1.next.next.next = new Node(6);
LLMergeSort ll2 = new LLMergeSort();
ll2.head2 = new Node(18);
ll2.head2.next = new Node(15);
ll2.head2.next.next = new Node(9);
ll2.head2.next.next.next = new Node(7);
ll2.head2.next.next.next.next = new Node(2);
LLMergeSort ll3 = new LLMergeSort();
ll3.newHead = null;
merge(head1,head2,newHead);
}
}
我是新來編碼,所以如果有人覺得我的程序不符合標準,那麼請告訴我。
我不清楚你的代碼是幹什麼的。也許描述你正試圖解決的具體問題。但是,'next.next.next.next'肯定不符合標準。 –
在運行代碼時,我得到了兩個鏈接的列表,相互之間沒有任何操作。我無法理解合併操作出錯的位置。 –
歡迎來到堆棧溢出!看起來你正在尋求作業幫助。雖然我們本身沒有任何問題,但請觀察這些[應做和不應該](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),並相應地編輯您的問題。 –