1.3.20

question:

Write a method delete() that takes an int argument k and deletes the kth element in a linked list, if it exists.

answer:

import edu.princeton.cs.algs4.*;

public class Linklist<Item>
{
    private static class Node<Item>
    {
        Item item;
        Node<Item> next;
    }
    
    public Node<Item> delete(int k, Node<Item> first)//删除第k节点
    {
        Node<Item> curr = first;
        int length = 0;
        while(curr.next != null)
        {
            length++;
            curr = curr.next;
        }
        if(k < 0 || k > length || first == null)
            return null;
        if(k == 0)
        {
            first = first.next;
            return first;
        }
        Node<Item> delete = first.next;
        Node<Item> before_delete = first;//删除节点delete就要知道它前一个节点
        int count = 1;
        while(count <= length)
        {
            if(count == k)
            {
                before_delete.next = delete.next;//删除节点delete
            }
            count++;
            delete = delete.next;
            before_delete = before_delete.next;
        }
        
        return first;
    }
    
    public static void main(String[] args)
    {
        Node<String> f = new Node<String>();
        Node<String> s = new Node<String>();
        Node<String> t = new Node<String>();
        Node<String> fo = new Node<String>();
        f.item = "a";
        f.next = s;
        s.item = "b";
        s.next= t;
        t.item = "c";
        t.next = fo;
        fo.item = "d";
        fo.next = null;
        StdOut.println("original link list:");
        Node head = f;
        while(head.next != null)
        {
            StdOut.print(head.item + " ");
            head = head.next;
        }
        StdOut.println(head.item);
        
        StdOut.println("input num n to delete the n node:(0-3)");//0-3
        int n = StdIn.readInt();
        
        StdOut.println("after delete the n node:");
        Linklist<String> linklist = new Linklist<String>();
        Node head2 = linklist.delete(n,f);//删除第n个节点
        if(head2 != null)
        {
            while(head2.next != null)
            {
                StdOut.print(head2.item + " ");
                head2 = head2.next;
            }
            StdOut.println(head2.item);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/w-j-c/p/8976803.html