المحتوى الرئيسي:
فقط قم بتحميل الكود ، إنه غير مقيد جدًا ~~~
package pers.ty. $ 1101Datercture ؛ import java.util.hashtable ؛/*** Author Administrator* قم بتنفيذ العمليات الأساسية للقوائم المرتبطة المفردة ، وإضافة العقد الحذف ، وفرز ، وطباعة ، وحساب الطول*/public class mylinkedlist {null ؛ // null ؛ بيانات الإدراج*/ public void addNode (int d) {node newNode = new node (d) ؛ if (head == null) {head = newNode ؛ يعود؛ } العقدة tmp = الرأس ؛ بينما (tmp.next! = null) {tmp = tmp.next ؛ } // إضافة عقدة لإنهاء tmp.next = newNode ؛ }/*** @param index: delete index node* return reproved true بنجاح ، ويعيد خطأ إذا فشل*/public boolean deletenode (int index) {if (index <1 || index> length ()) {return false ؛ العودة صحيح. } int i = 1 ؛ عقدة prenode = الرأس ؛ عقدة curnode = prenode.next ؛ بينما (curnode! = null) {if (i == index) {prenode.next = curnode.next ؛ العودة صحيح. } prenode = curnode ؛ curnode = curnode.next ؛ i ++ ؛ } إعادة صواب ؛ } / ** * return إرجاع طول طول القائمة المرتبط * / public int length () {int length = 0 ؛ عقدة TMP = الرأس ؛ بينما (tmp! = null) {length ++ ؛ tmp = tmp.next ؛ } طول الإرجاع ؛ } / *** فرز القائمة المرتبطة* return إرجاع عقدة الرأس المرتبة* / public node orderlist () {node nextNode = null ؛ int temp = 0 ؛ عقدة curnode = الرأس ؛ بينما (curnode.next! = null) {nextNode = curnode.next ؛ بينما (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 print () {node tmp = head ؛ بينما (tmp! = null) {system.out.print (tmp.data+"") ؛ tmp = tmp.next ؛ } system.out.println () ؛ } /*** الطريقة الأولى لحذف البيانات من القائمة المرتبطة* اجتياز القائمة المرتبطة وتخزين البيانات التي تم اجتيازها في علامة تصنيف. أثناء عملية اجتياز ، إذا كانت القيمة التي تم الوصول إليها حاليًا موجودة في علامة التجزئة*، يمكنك حذفها*المزايا: تعقيد الوقت المنخفض: مطلوب مساحة تخزين إضافية لحفظ البيانات التي تم الوصول إليها*/ public void deleteduplecate1 () {hashtable <integer ، integer> table = new hastable <integer ، integer>) ؛ عقدة TMP = الرأس ؛ العقدة قبل = فارغة ؛ بينما (tmp! = null) {if (table.containskey (tmp.data)) pre.next = tmp.next ؛ آخر {table.put (tmp.data ، 1) ؛ pre = tmp ؛ } tmp = tmp.next ؛ }} / *** الطريقة الثانية لحذف البيانات المكررة من القائمة المرتبطة* traversal double loop* تكون المزايا والعيوب واضحة* / public void deleteduplecate2 () {node p = head ؛ بينما (p! = null) {node q = p ؛ بينما (q.next! = null) {if (p.data == q.next.data) {q.next = q.next.next ؛ } آخر {q = q.next ؛ }} p = p.next ؛ }} /*** param k: ابحث عن k-th حتى آخر عقدة في القائمة المرتبطة* @RETURN هذه العقدة* تعيين مؤشرين p1 و p2 لجعل p2 k أسرع من p1 ، والتجارة للخلف في نفس الوقت. عندما يكون P2 فارغًا ، يكون P1 هو K-Th حتى آخر عقدة*/ عقدة عامة Findelem (Head Node ، int K) {if (k <1 || k> this.length ()) return null ؛ العقدة P1 = الرأس ؛ العقدة p2 = الرأس ؛ لـ (int i = 0 ؛ i <k-1 ؛ i ++) p2 = p2.next ؛ بينما (p2.next! = null) {p2 = p2.next ؛ p1 = p1.next ؛ } إرجاع p1 ؛ } / *** قم بتنفيذ انعكاس القائمة المرتبطة* param head عقدة الرأس للقائمة المرتبطة* / public void revisitierister (node head) {node preversedhead = head ؛ عقدة pnode = الرأس ؛ عقدة pprev = null ؛ بينما (pnode! = null) {node pnext = pnode.next ؛ إذا (pnext == null) preversedhead = pNode ؛ pnode.next = pprev ؛ pprev = pnode ؛ pnode = pnext ؛ } this.head = preversedhead ؛ } / *** إخراج قائمة واحدة مرتبطة من الذيل إلى الرأس عن طريق متكرر* param head* / public void printListReverSely (node head) {if (head! = null) {printListReverSely (head.next) ؛ system.out.print (head.data+"") ؛ }} / *** Query العقدة الوسيطة لقائمة واحدة مرتبطة* حدد مؤشرين ، خطوة واحدة في كل مرة والخطوتين الأخريين في وقت واحد ...* param head* regurn q هي العقدة المتوسطة* / public node searchmid (head node) {node q = head ؛ العقدة p = الرأس ؛ بينما (p! = null && p.next! = null && p.next.next! = null) {q = q.next ؛ p = p.next.next ؛ } العودة س ؛ } / *** حذف العقدة المحددة دون معرفة مؤشر الرأس* لا يمكن حذف عقدة الذيل للقائمة المرتبطة لأن المؤشر التالي لعقدة سلفه لا يمكن تعيينه على فارغ بعد الحذف* يمكن للعقد الأخرى تبادل قيم هذه العقدة وعقدة خلفها ، ثم حذف Node* param n* @return* / public booNODE (node node node (node node node ( if (n == null || n.next == null) return false ؛ int tmp = n.data ؛ n.data = n.next.data ؛ n.next.data = tmp ؛ n.next = n.next.next ؛ العودة صحيح. } / *** حدد ما إذا كان هناك قائمتان مرتبطتان متقاطعتان* إذا تتقاطع قائمتان مرتبطتان ، فيجب أن يكون هناك نفس عقدة الذيل ، وتجتاز قائمتين مرتبطتين ، وسجل العقد الذيل ، ومعرفة ما إذا كانا متماثلان* @param h1 head ad boolean leode 1* param h2 head node of linked learn 2* regurn recturn* / public exelect (nodeect (nodeect (node he1). if (h1 == null || h2 == null) return false ؛ عقدة tail1 = H1 ؛ بينما (tail1.next! = null) {tail1 = tail1.next ؛ } Node Tail2 = H2 ؛ بينما (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 ؛ عقدة tail1 = H1 ؛ int len1 = 1 ؛ بينما (tail1.next! = null) {tail1 = tail1.next ؛ LEN1 ++ ؛ } Node Tail2 = H2 ؛ int len2 = 1 ؛ بينما (tail2.next! = null) {tail2 = tail2.next ؛ LEN2 ++ ؛ } if (tail1! = tail2) {return null ؛ } العقدة T1 = H1 ؛ العقدة T2 = H2 ؛ // اكتشف القائمة المرتبطة الأطول وانتقل إذا (len1> len2) {int d = len1-len2 ؛ بينما (d! = 0) {t1 = t1.next ؛ د-؛ }} if (len1 <len2) {int d = len2-len1 ؛ بينما (d! = 0) {t2 = t2.next ؛ د-؛ }} بينما (t1! = t2) {t1 = t1.next ؛ T2 = t2.next ؛ } إرجاع T1 ؛ } public static void main (string [] args) {myLinkedList list = new MyLinkedList () ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون محتوى هذه المقالة من بعض المساعدة في دراسة أو عمل الجميع. آمل أيضًا دعم wulin.com أكثر!