备战华为机考3——链表头插法

第一次遇到这种方法,好神奇,把每一个数据从后往前插入,这样dummy就一直往前走。

插入node = dummy.next;

dummy.next = node;

这样就一点一点往前插。到最后dummy自然而然就是头结点了。

 

import java.util.*;
class ListNode{
    int val;
    ListNode next;
    ListNode(){}
    ListNode(int val){
        this.val = val;
    }
    ListNode(int val, ListNode next){
        this.val = val;
        this.next = next;
    }
}
public class Main{
    public static void main(String args[]){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
        int size = scan.nextInt();
        ListNode dummy = new ListNode();
        for(int i = 0; i<size; i++){
            int value = scan.nextInt();
            ListNode node = new ListNode(value,dummy.next);
            dummy.next = node;
        }
        int index = scan.nextInt();
        ListNode pre = dummy;
        for(int i = 0; i<index; i++){
            pre = pre.next;
        }
        System.out.println(pre.val);
        }

    }
}

 

在这里放一个非常经典的设计链表,所有功能都很全

class ListNode{
    int val;
    ListNode next;
    ListNode(){}
    ListNode(int val){
        this.val = val;
    }
}

class MyLinkedList {
    int size;
    ListNode dummy;
    public MyLinkedList() {
        size = 0;
        dummy = new ListNode(0);
    }
    
    public int get(int index) {
        ListNode pre = dummy;
        ListNode cur = pre.next;
        if(index < 0 || index >= size){
            return -1;
        }
        for(int i = 0; i<=index; i++){
            pre = pre.next;
        }
        return pre.val;
    }
    
    public void addAtHead(int val) {
        addAtIndex(0,val);
    }
    
    public void addAtTail(int val) {
        addAtIndex(size,val);
    }

    public void addAtIndex(int index, int val) {
        ListNode pre = dummy;
        ListNode cur = pre.next;
        if(index<0){
            index = 0;
        }
        if(index>size){
           return;
        }
        for(int i = 0; i < index; i++){
            pre = pre.next;
        }
        ListNode toAdd = new ListNode(val);
        toAdd.next = pre.next;
        pre.next = toAdd;
        size++;
    }
    
    public void deleteAtIndex(int index) {
        ListNode pre = dummy;
        ListNode cur = pre.next;
        if(index<0 || index>=size) return;
        for(int i =0; i<index; i++){
            pre = pre.next;
            cur = cur.next;
        }
        pre.next = cur.next;
        cur = cur.next;
        size--;

    }
}

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList obj = new MyLinkedList();
 * int param_1 = obj.get(index);
 * obj.addAtHead(val);
 * obj.addAtTail(val);
 * obj.addAtIndex(index,val);
 * obj.deleteAtIndex(index);
 */

 

posted @ 2022-03-25 15:34  曲海鑫  阅读(65)  评论(0)    收藏  举报