java复习之链表
主要复习单链表,多链表,双向链表及相关操作
单链表
这里出了点小问题,用框架多了,脑子瓦特了,break和return 混了,return强制结束当前的方法,不论在多少层嵌套中,break结束当前的循环(while也是个循环啊,qaq,基础代码不写手生了啊!)
package learn;
public class LinkedList {
public static void main(String[] args) {
Node node1= new Node("1");
Node node2= new Node("2");
Node node3= new Node("3");
Node node4= new Node("4");
LinkList linkList = new LinkList();
linkList.add(node1);
linkList.add(node2);
linkList.add(node3);
linkList.add(node4);
linkList.list();
}
}
class Node{
public String data;
public Node next;
public Node(String data) {
this.data = data;
}
@Override
public String toString() {
return "Node{" +
"data='" + data + '\'' +
'}';
}
}
class LinkList{
private Node head;
private Node temp;
public LinkList() {
head=new Node("0");
temp=head;
}
public void add(Node node){
while (true) {
if(temp.next==null){
break;
}
temp=temp.next;
}
temp.next=node;
}
public void list(){
if(head.next==null){
return;
}
temp=head.next;
while (true){
if(temp==null){
break;
}
System.out.println(temp);
temp=temp.next;
}
}
}
接下来是对插入的节点进行判断,按顺序输出
这里主要是对临时标记(指针?引用)temp的使用,temp从头节点开始,使用temp.next和新插入的节点进行比较,只要大于新插入的节点,那就进行插入,插入的过程就不说了,看代码就两行。
package learn;
public class LinkedList {
public static void main(String[] args) {
Node node1= new Node(1);
Node node2= new Node(2);
Node node3= new Node(3);
Node node4= new Node(7);
LinkList linkList = new LinkList();
linkList.addByOrder(node1);
linkList.addByOrder(node4);
linkList.addByOrder(node3);
linkList.addByOrder(node2);
linkList.addByOrder(new Node(5));
linkList.list();
}
}
class Node{
public int data;
public Node next;
public Node(int data) {
this.data = data;
}
@Override
public String toString() {
return "Node{" +
"data='" + data + '\'' +
'}';
}
}
class LinkList{
private Node head;
private Node temp;
public LinkList() {
head=new Node(0);
temp=head;
}
public void addByOrder(Node node){
temp=head;
boolean flag=false;
while (true){
if(temp.next==null){
break;
}
if(temp.next.data>node.data){
break;
}else if(temp.next.data==node.data){
flag=true;
break;
}
temp=temp.next;
}
if(flag==false){
node.next=temp.next;
temp.next=node;
}
}
public void add(Node node){
while (true) {
if(temp.next==null){
break;
}
temp=temp.next;
}
temp.next=node;
}
public void list(){
if(head.next==null){
return;
}
temp=head.next;
while (true){
if(temp==null){
break;
}
System.out.println(temp);
temp=temp.next;
}
}
}
再加一个删除的方法,还是利用temp
public void delete(Node node){
temp=head;
while(temp.next!=null){
if(temp.next.data==node.data){
temp.next=temp.next.next;
break;
}
}
}