題目描述
- 刪除單鏈表倒數第k個節點,要求時間複雜度爲n,空間複雜度爲1。
解題方法1
- 最簡單的方法,先將鏈表遍歷一遍求出鏈表長度n,那麼倒數第k個節點其實就是第n-k+1個節點。
- 然後再次遍歷鏈表找到待刪除的節點和刪除節點前一個節點即可。
public class Test {
public static void main(String[] args) throws Exception {
int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12};
Node head = create1(arr);
delnode(head,10);
for(Node p=head.next;p!=null;p=p.next){
System.out.print(p.val + " ");
}
}
public static void delnode(Node head,int k){
int len=0;
for(Node p=head.next;p!=null;p=p.next){
len++;
}
int num = len-k+1;
if(num>len || num<1){
return;
}
Node prenode = head;
for(int i=0;i<num-1;i++){
prenode = prenode.next;
}
prenode.next = prenode.next.next;
}
public static Node create1(int[] arr){
Node head = new Node(0);
Node newnode = null;
Node lastnode = head;
for(int a:arr){
newnode = new Node(a);
newnode.next = lastnode.next;
lastnode.next = newnode;
lastnode = newnode;
}
return head;
}
}
class Node{
int val;
Node next;
Node(int val){
this.val = val;
}
}