數據結構與算法系列----刪除鏈表倒數第 n 個結點

 題目: 刪除鏈表倒數第 n 個結點
* 例子:刪除倒數第4個節點 1->3->5->8->9->10->12->11->17
* 結果爲:1->3->5->8->9->12->11->17
* 思路:先讓指向頭結點的指針 tmp 先向下走 n 個節點,接着頭結點 head 與tmp同時走,指導tmp節點到達尾結點,
*    此時頭結點head的下一個指針就是要刪除的節點,將其從鏈表中移除
public class LinkedList {


    public void print(LinkedNode<Integer> root){
        LinkedNode<Integer>  tmp = root;
        while (tmp.next!=null){
            System.out.print(tmp.value+"->");
            tmp = tmp.next;
        }
        System.out.print(tmp.value);
        System.out.println();
    }
    //創建鏈表
    public LinkedNode<Integer> constructLinkedList(LinkedNode<Integer>... nodes){
        LinkedNode<Integer>  root = new LinkedNode<>(0);
        LinkedNode<Integer>  tmp  = root;
        for(LinkedNode<Integer> node:nodes){
            tmp.next = node;
            tmp = tmp.next;
        }
        return root.next;
    }
 

    /**
     * 4、題目: 刪除鏈表倒數第 n 個結點
     * 例子:刪除倒數第4個節點 1->3->5->8->9->10->12->11->17
     * 結果爲:1->3->5->8->9->12->11->17
     * 思路:先讓指向頭結點的指針 tmp 先向下走 n 個節點,接着頭結點 head 與tmp同時走,指導tmp節點到達尾結點,
     *    此時頭結點head的下一個指針就是要刪除的節點,將其從鏈表中移除
     */
    @Test
    public void test4(){
        LinkedNode<Integer>  node11 = new LinkedNode<>(1);
        LinkedNode<Integer>  node12 = new LinkedNode<>(3);
        LinkedNode<Integer>  node13 = new LinkedNode<>(5);
        LinkedNode<Integer>  node14 = new LinkedNode<>(8);
        LinkedNode<Integer>  node15 = new LinkedNode<>(9);
        LinkedNode<Integer>  node16 = new LinkedNode<>(10);
        LinkedNode<Integer>  node17 = new LinkedNode<>(12);
        LinkedNode<Integer>  node18 = new LinkedNode<>(11);
        LinkedNode<Integer>  node19 = new LinkedNode<>(17);

        LinkedNode<Integer>  root = constructLinkedList(node11,node12,node13,node14,node15,node16,node17,node18,node19);

        print(root);

        int n = 4;

        LinkedNode<Integer>  tmp1 = root;
        LinkedNode<Integer>  tmp2 = root;
        while (n>0){
            tmp2 = tmp2.next;
            n--;
        }

        while (tmp2.next !=null){
            tmp2 = tmp2.next;
            tmp1 = tmp1.next;
        }

        tmp1.next = tmp1.next.next;

        print(root);

    }

}

輸出結果:

1->3->5->8->9->10->12->11->17
1->3->5->8->9->12->11->17

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章