java实现单向链表CRUD,反转,排序,查找倒数第k个元素,递归输出等操作
2017-08-03 09:41
1251 查看
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; } }
相关文章推荐
- 单链表的创建(头插尾插),表长,输出,插入,删除,查找,逆置,分解长两个链表(奇数偶数链表),查找倒数第k个元素,产出相同元素
- 查找一个单向链表中倒数第K个元素
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- C实现简单单向链表,一次遍历查找倒数第k个节点的值
- 今天开始学Java 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
- java实现输入一个链表,输出该链表中倒数第k个结点。
- 尾插法、头插法创建链表、链表反转、链表分段反转、查找链表倒数第k个元素,查找链表中间元素
- [java 面试100道]13.输入一个单向链表,输出该链表中倒数第k个结点。
- 单向链表的相关操作总结:创建、删除、查找、排序、统计链表大小、链表的反转和遍历等
- java实现输入一个链表,反转链表后,输出链表的所有元素。
- 输出单向链表的倒数第K个元素
- 输入链表输出该链表倒数第k个结点java实现
- 查找单向链表倒数第n个元素
- 面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- C递归实现单向链表的反转
- 查找单链表中倒数第k个元素
- 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表 的尾指针
- 用JAVA语言,编写一个链表类(双向链表),实现插入,删除,查找操作
- 输入一个单向链表,输出该链表中倒数第k个结点
- 程序员面试100题(算法)之查找链表中倒数第k个节点(含单向链表的创建和打印)