备战华为机考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); */

浙公网安备 33010602011771号