搜索两个不同链表之间的差异
Searching difference between two different linked list
我的两个方法“oneTwo”和“twoOne”有问题,打印时“结果”列表没有给出任何输出。
这是我做的案例:
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;
}
我的两个方法“oneTwo”和“twoOne”有问题,打印时“结果”列表没有给出任何输出。
这是我做的案例:
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;
}