3.线性表的链式表示

来源:互联网 发布:vscode markdown 预览 编辑:程序博客网 时间:2024/06/07 00:43
package linkList;//节点类的泛型定义public class Node<T> {T data;Node<T> next;public Node(Node<T> n){next=n;}public Node(T obj,Node<T> n){data=obj;   next=n;}public T getData(){return data;}public Node<T> getNext(){return next;}}


package linkList;import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;public class LinkList<T>{private Node<T> head;private int length;//初始化public LinkList(){length = 0;head  = new Node<T> (null);}//1.获取单链表头结点地址public Node<T> getHead(){return head;}//2.单链表的插入public boolean add(int pos,T obj){if(pos<1||pos>length+1){System.out.println("索引不合法");return false;}int num = 1;Node<T> p = head,q = head.next;while(num<pos){p=q; q = q.next; num++;}p.next = new Node<T>(obj,q);length++;return true;}//3.单链表的删除public T delete(int pos){//首先还是要判断索引合法否,这里省略int num = 1;Node<T> p = head,q = head.next;while(num<pos){p=q; q = q.next; num++;}p.next = q.next ; length--;return q.data;}//4.更新某个节点的值public boolean modify(T obj,int pos){if((pos<1||pos>length+1)){System.out.println("pos值不合法");return false;}int num=1;Node<T> q=head.next;while(num<pos){q=q.next;num++;}q.data=obj;return true;}//5.单链表的查找public int find(T obj){int num=1;Node<T> p=head.next;    while(p!=null){          //单链表的判空条件if(p.data.equals(obj)==false){   p=p.next;num++;}else break;}if(p==null) return -1;return num;}//6.获取某个节点的值public T value(int pos){if((pos<1||pos>length+1)){System.out.println("pos值不合法");return null;}int num=1;Node<T> q=head.next;while(num<pos){q=q.next;num++;}return q.data;}//7.判断单链表是否为空public boolean isEmpty(){return length == 0;}//8.求单链表的长度public int size(){return length;}//9.正序输出链表的所有元素public void nextOrder(){Node<T> p = head.next;while(p!=null){System.out.println(p.data);p = p.next;}}//10.清空单链表public void clear(){length = 0;head.next = null;}}