java實現單向連結串列CRUD,反轉,排序,查詢倒數第k個元素,遞迴輸出等操作
阿新 • • 發佈:2019-01-09
package myLink;
import javax.xml.transform.Templates;
public class LianBiao {
static Node head=null;
/**
* 查詢單鏈表的中間節點
* */
public Node getMid(){
Node p=head;
Node q=p;
while(p!=null&&p.next!=null&&p.next.next!=null){
p=p.next.next;
q=q.next;
}
return q;
}
/**
* 連結串列長度
* */
public int getLen(Node head){
int count=0;
Node temp=head;
while(temp!=null){
temp=temp.next;
count++;
}
return count;
}
/**
* 增加節點
* */
public void add(Object obj){
Node n=new Node(obj);
if(head==null){
head=n;
return;
}
Node temp=head;
while(temp.next!=null){
temp=temp.next;
}
temp.next=n;
}
/**
* 遍歷連結串列
* */
public void traver(Node head){
Node temp=head;
while (temp!=null){
System.out.print(temp.obj+"\t");
temp=temp.next;
}
}
/**
* 查詢倒數第k個元素
* 思路:p,q先=頭節點,p先前進k,p,q再同時前進,返回q
* */
public Node findDSElem(int k){
Node p=head;
Node q=head;
int count=0;
if(k<0||k>getLen(head)){
return null;
}
while(count!=k){
p=p.next;
count++;
}
while(p!=null){
p=p.next;
q=q.next;
}
return q;
}
/**
* 對連結串列進行排序
* */
public Node orderList(Node n){
Object tmp=null;
Node curNode=head;
Node nextNode=curNode.next;
while(curNode.next!=null){
nextNode=curNode.next;
while(nextNode!=null){
if((int)curNode.obj>(int)nextNode.obj){
tmp=curNode.obj;
curNode.obj=nextNode.obj;
nextNode.obj=tmp;
}
nextNode=nextNode.next;
}
curNode=curNode.next;
}
return head;
}
/**
* 遞迴遍歷
* */
public void printDiGui(Node n){
if(n!=null){
System.out.print(n.obj+"\t");
printDiGui(n.next);
}
}
/**
* 刪除重複節點
* */
public void deleteCopy(Node n){
Node cur=head;
while(cur.next!=null){
Node next=cur.next;
if(cur.obj==next.obj){
cur.next=next.next;
cur=cur.next;
}else{
cur=cur.next;
}
}
}
/**
* 刪除節點
* */
public void delete(int index){
if(index<1||index>getLen(head)){
return;
}
//頭結點,頭指標有待完善
if(index==1){
head.next=head.next.next;
return;
}
Node preNode=head;
Node curNode=preNode.next;
int count=1;//count==2
while(curNode!=null){
if(index==count){
preNode.next=curNode.next;
return;
}
preNode=curNode;
curNode=curNode.next;
count++;
}
}
public static void main(String[] args) {
LianBiao lb=new LianBiao();
lb.add(1);
lb.add(3);
lb.add(9);
lb.add(5);
lb.add(4);
lb.add(4);
lb.add(2);
lb.add(6);
/*lb.orderList(head);
lb.traver(head);*/
lb.traver(head);
System.out.println();
//System.out.println(lb.getMid().obj);
//lb.deleteCopy(head);
//System.out.println("長度:"+lb.getLen(head));
//System.out.println(lb.findDSElem(1).obj);
lb.printDiGui(head);
lb.delete(2);
System.out.println();
lb.printDiGui(head);
}
}
class Node{
Object obj;
Node next;
public Node(Object obj){
this.obj=obj;
}
public Node(){
}
/**
* @return the obj
*/
public Object getObj() {
return obj;
}
/**
* @param obj the obj to set
*/
public void setObj(Object obj) {
this.obj = obj;
}
/**
* @return the next
*/
public Node getNext() {
return next;
}
/**
* @param next the next to set
*/
public void setNext(Node next) {
this.next = next;
}
}