如何解决搜索两个不同链表之间的差异
我的两个方法“oneTwo”和“twoOne”有问题,其中“result”列表在我打印时没有给出任何输出。
这是我做过的案例:
add list1 ana
add list2 ana
add list1 ben
add list2 bob
add list1 james
add list2 james
print_difference list1 list2
出于某种原因,它没有给我任何输出,但是“print list1”会。
import java.util.Scanner;
class Node{
Object data;
Node next;
Node prev;
public Node() {
}
public Node(Object data) {
this(data,null,null);
}
public Node(Object data,Node next,Node prev) {
this.data=data;
this.next=next;
this.prev=prev;
}
}
class DoublyLinkedList {
Node head,tail;
int size;
public DoublyLinkedList() {
makeEmpty();
}
public boolean isEmpty() {
return size == 0;
}
public void makeEmpty() {
head=tail=null;
size=0;
}
public int size() {
return size;
}
//adding
public void addLast(Object x) {
Node tmp=new Node(x);
if (head==null && tail==null) {
head=tail=tmp;
size++;
}else {
tmp.prev=tail;
tail.next=tmp;
tmp.next=null;
tail=tmp;
size++;
}
}
//print
public void print() {
Node p=head;
while(p!=null) {
System.out.print(p.data);
if(p.next!=null) {
System.out.print("-");
}
p=p.next;
}
System.out.println();
}
这部分似乎对我不起作用
//compare
void oneTwo(DoublyLinkedList a) {
DoublyLinkedList result=new DoublyLinkedList();
Node p=head;
do {
boolean check=a.searchByData(p.data);
if(check==false) {
result.addLast(p.data);
}
p=p.next;
}while(p.next!=null);
System.out.print("LIST_difference1 : ");
result.print();
}
void twoOne(DoublyLinkedList a) {
DoublyLinkedList result=new DoublyLinkedList();
Node p=head;
do {
boolean check=a.searchByData(p.data);
if(check==false) {
result.addLast(p.data);
}
p=p.next;
}while(p.next!=null);
System.out.print("LIST_difference2 : ");
result.print();
}
“result.print();”没有任何输出
public boolean searchByData(Object x) {
Node search=head;
boolean check=false;
while(search.data != x) {
if(search.data.equals(x)) {
check=true;
break;
}
if(search.next!=null) {
search=search.next;
}else {
check=false;
}
}
return check;
}
}
public class FindTheDifference {
public static void main(String[] args) {
DoublyLinkedList one=new DoublyLinkedList();
DoublyLinkedList two=new DoublyLinkedList();
while (true){
Scanner scan=new Scanner(System.in);
String input=scan.nextLine();
String[] inputs=input.trim().split(" ");
if(inputs[0].equalsIgnoreCase("add")) {
if(inputs[1].equalsIgnoreCase("list1")) {
one.addLast(inputs[2]);
}else {
two.addLast(inputs[2]);
}
}else if(inputs[0].equalsIgnoreCase("print")) {
if(inputs[1].equalsIgnoreCase("list1")) {
one.print();
}else {
two.print();
}
}else if(inputs[0].equalsIgnoreCase("print_difference")) {
if(inputs[1].equalsIgnoreCase("list1") && inputs[2].equalsIgnoreCase("list2")) {
one.oneTwo(two);
}else if(inputs[1].equalsIgnoreCase("list2") && inputs[2].equalsIgnoreCase("list1")) {
two.twoOne(one);
}
}
}
}
}
我的代码有什么问题?任何帮助将不胜感激。
解决方法
因为在 a.searchByData() 中发生了死循环
喜欢这个
public boolean searchByData(Object x) {
Node search = head;
boolean check = false;
while (search.data != x) {
if (search.data.equals(x)) {
check = true;
break;
}
if (search.next != null) {
search = search.next;
} else {
//If it doesn't match here and it's at the end of the linked list
//should break
check = false;
break;
}
}
return check;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。