通過編碼實現單鏈表稍微複雜點的操作功能:
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 booleannodehascycle(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 booleannodeisintersect(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...