java鍊錶高階程式設計題

2021-08-18 16:17:39 字數 1872 閱讀 7825

通過編碼實現單鏈表稍微複雜點的操作功能:

1 查詢鍊錶倒數最後的n節點

public node findnodelasttopn(node head,int n )

node previous = head;

node current = head;

for(int i = 0

;i1;i++)

current = current.next;}

while(current.next!=null)

return previous;

}

2 刪除鍊錶中倒數最後的n節點

public node deletenodelasttopn(node head,int n )

node first = head;

node second = head;

for(int i = 0

;i1;i++)

second = second.next;}

while(second.next!=null)

return first;

}

3 判斷鍊錶中是否有環

public boolean 

nodehascycle(node head)

node slow,fast;

fast = head.next

;slow = head;

while(fast!=slow)

fast = fast.next.next

;slow = slow.next;}

return true;

}

4 判斷兩個鍊錶中是否有交點

public static boolean 

nodeisintersect(node head1, node head2)

node tail1 = head1;

// 找到鍊錶

1的最後乙個節點

while (tail1.next != null)

node tail2 = head2;

// 找到鍊錶

2的最後乙個節點

while (tail2.next != null)

return tail1 == tail2;

}

5 獲取兩個相交的鍊錶第乙個結點

public static node getintersectfirstnode(node head1, node head2) 

int len1 = 1

;node tail1 = head1;

while (tail1.next != null)

int len2 = 1

;node tail2 = head2;

while (tail2.next != null)

// 不相交直接返回

null

if (tail1 != tail2)

node n1 = head1;

node n2 = head2;

// 略過較長鍊錶多餘的部分

if (len1 > len2)

} else

}//

一起向後遍歷,直到找到交點

while (n1 != n2)

return n1;

}

6 刪除鍊錶中重複的元素

public node deleterepeatnode(node head)

node node = head;

while(node.next != null)else

}return head;

}

程式設計題 分隔鍊錶

題目介紹 給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2 x 3 輸出 1 2 2 4 3 5 思路 將整個鍊錶分為兩個鍊錶,一部分是小於x的,一部分是大...

程式設計題 關於鍊錶

目錄 從尾到頭列印鍊錶 劍指歐肥兒 刪除鍊錶中重複的節點 劍指歐肥兒 鍊錶中環的入口結點 劍指歐肥兒 兩個鍊錶的第乙個公共結點 劍指歐肥兒 合併兩個排序的鍊錶 劍指歐肥兒 反轉鍊錶 劍指歐肥兒 題目描述 輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。解題 class solutio...

經典鍊錶演算法題(Java實現)

要求 輸入乙個單鏈表,輸出此煉表中的倒數第 k 個節點。思路 兩個指標指向頭節點,乙個指標先走k 1步,兩個指標一起往前走,當快指標走到最後時,慢指標指向的就是倒數第k個節點了 static listnode findlastnode listnode head,int k while pre.ne...