주요 내용 :
코드를 업로드하기 만하면 ~~~가 너무 제한되지 않습니다
PACKED PERS.TY. $ 1101DATASTRUCTURE; import java.util.hashtable;/*** @Author Administrator* 단일 링크 목록의 기본 작업을 구현하고, 삭제 노드 추가, 정렬, 인쇄 및 계산 길이*/public class mylinkedList {node head = null; // 링크 된 목록의 함수/** inted insert insert insert 데이터 삽입 데이터*/ public void addnode (int d) {node newnode = new Node (d); if (head == null) {head = newnode; 반품; } 노드 tmp = 헤드; while (tmp.next! = null) {tmp = tmp.next; } // 끝에 노드를 추가하여 tmp.next = newnode; }/*** @param index : INDEX NODE 삭제* @RETURN은 실패한 경우 false를 반환하고 false를 반환합니다*/public boolean deleteNode (int index) {if (index <1 || index> length ()) {return false; // 요소 위치가 불합리한 위치를 삭제합니다} // 링크 된 목록에서 첫 번째 요소를 삭제합니다. 진실을 반환하십시오. } int i = 1; 노드 prenode = 헤드; 노드 curnode = prenode.next; while (curnode! = null) {if (i == index) {prenode.next = curnode.next; 진실을 반환하십시오. } prenode = curnode; Curnode = Curnode.next; i ++; } true를 반환합니다. } / ** * @return 링크 된 목록 길이의 길이 * / public int longth () {int length = 0; 노드 tmp = 헤드; while (tmp! = null) {길이 ++; tmp = tmp.next; } 반환 길이; } / *** 링크 된 목록을 정렬* @return 정렬 된 헤더 노드를 반환* / public node orderlist () {노드 NextNode = null; int temp = 0; 노드 curnode = 헤드; while (curnode.next! = null) {nextNode = curnode.next; while (nextNode! = null) {if (curnode.data> nextNode.Data) {temp = curnode.data; curnode.data = nextnode.data; NextNode.data = Temp; } nextNode = nextNode.next; } curnode = curnode.next; } 반환 헤드; } / *** 링크 된 목록에 모든 데이터를 인쇄* / public void printlist () {Node tmp = head; while (tmp! = null) {system.out.print (tmp.data+""); tmp = tmp.next; } system.out.println (); } /*** 링크 된 목록에서 데이터를 삭제하는 첫 번째 방법* 링크 된 목록을 가로 지르고 트래버스 된 데이터를 해시 가능에 저장하십시오. 트래버스 프로세스 중에, 현재 액세스 한 값이 해시 테이블*에 존재하는 경우, 당신은 그것을 삭제할 수 있습니다. 노드 tmp = 헤드; 노드 pre = null; while (tmp! = null) {if (table.containskey (tmp.data)) pre.next = tmp.next; else {table.put (tmp.data, 1); pre = tmp; } tmp = tmp.next; }} / *** 링크 된 목록에서 복제 데이터를 삭제하는 두 번째 방법* 이중 루프 트래버스* 장점과 단점은 명백합니다* / public void deleteduplecate2 () {Node p = head; while (p! = null) {노드 q = p; while (q.next! = null) {if (p.data == q.next.data) {q.next = q.next.next; } else {Q = Q.Next; }} p = p.next; }} /*** @param k : 링크 된 목록의 마지막 노드가 될 때까지 k-th를 찾으십시오.* @return이 노드* 두 포인터 p1과 p2를 p1보다 더 빠르게 만들고 동시에 뒤로 이동합니다. p2가 비어 있으면 P1은 마지막 노드*/ public node findelem (node head, int k) {if (k <1 || k> this.length ()) return null; 노드 p1 = 헤드; 노드 p2 = 헤드; for (int i = 0; i <k-1; i ++) p2 = p2.next; while (p2.next! = null) {p2 = p2.next; p1 = p1.next; } 반환 p1; } / *** 링크 된 목록의 반전 구현* @param 링크 된 목록의 헤드 노드* / public void Reverseteratiatial (Node Head) {노드 preversedhead = head; 노드 pnode = 헤드; 노드 pprev = null; while (pnode! = null) {node pnext = pnode.next; if (pnext == null) preversedhead = pnode; pnode.next = pprev; pprev = pnode; pnode = pnext; } this.head = preversedhead; } / *** 재귀 적으로 꼬리에서 머리까지 단일 링크 된 목록을 출력* @param head* / public void printlistressly (node head) {if (head! = null) {printlistversely (head.next); System.out.print (Head.Data+""); }} / *** 단일 링크 목록의 중간 노드 쿼리* 한 번에 한 단계 씩 두 개의 포인터를 정의하고 한 번에 두 단계를 정의합니다 ...* @param head* @return q 중간 노드* / public node searchmid (Node Head) {Node q = head; 노드 p = 헤드; while (p! = null && p.next! = null && p.next.next! = null) {q = q.next; p = p.next.next; } 반환 q; } / *** 헤드 포인터를 알지 못하고 지정된 노드를 삭제* 링크 된 목록의 꼬리 노드는 삭제 후 이전 노드의 다음 포인터를 비워 둘 수 없기 때문에 삭제할 수 없기 때문에 다른 노드는이 노드와 후속 노드의 값을 교환 한 다음 후속 노드* @param n* @return* / public bolean deletenode (node n. n) <<@param n)을 삭제할 수 있습니다. if (n == null || n.next == null) false를 반환합니다. int tmp = n.data; n.data = n.next.data; n.next.data = tmp; n.next = n.next.next; 진실을 반환하십시오. } / *** 두 개의 링크 된 목록이 교차하는지 여부를 결정하십시오* 두 개의 링크 된 목록이 교차하는 경우 동일한 꼬리 노드가 있어야하고, 두 개의 링크 된 목록을 가로 지르고, 꼬리 노드를 기록하며, 링크 된 목록의 링크 된 목록의 @param H1 헤드 노드 2* @param H2 헤드 노드 2* / public boolean h1 (node h1), node h1, node h1, node h1, node h1, node h1, node h1, node h1, node h1, node h1. if (h1 == null || h2 == null) false를 반환합니다. 노드 테일 1 = H1; while (tail1.next! = null) {tail1 = tail1.next; } 노드 꼬리 = h2; while (tail2.next! = null) {tail2 = tail2.next; } return tail1 == tail2; } / ** * 교차하는 첫 번째 노드를 찾으십시오 * @param h1 * @param h2 * @return * / public node getFirstMeetNode (node h1, node h2) {if (h1 == null || h2 == null) return null; 노드 테일 1 = H1; int len1 = 1; while (tail1.next! = null) {tail1 = tail1.next; LEN1 ++; } 노드 꼬리 = h2; int len2 = 1; while (tail2.next! = null) {tail2 = tail2.next; LEN2 ++; } if (tail1! = tail2) {return null; } 노드 t1 = h1; 노드 T2 = H2; // 더 긴 링크 된 목록을 찾고 if (len1> len2) {int d = len1-len2; while (d! = 0) {t1 = t1.next; 디--; }} if (len1 <len2) {int d = len2-len1; while (d! = 0) {t2 = t2.next; 디--; }} while (t1! = t2) {t1 = t1.next; t2 = t2.next; } return t1; } public static void main (String [] args) {myLinkedList list = new MyLinkedList (); }}위는이 기사의 모든 내용입니다. 이 기사의 내용이 모든 사람의 연구 나 업무에 도움이되기를 바랍니다. 또한 wulin.com을 더 지원하기를 바랍니다!