1.Java是如何构造出链表的
public class ListNode {
public int val;
public ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
ListNode head = new ListNode(6);
这里的val就是当前结点的值,next指向下一个结点。因为两个变量都是public的,创建对象后能直接使用listnode.val和listnode.next来操作,虽然违背了面向对象的设计要求,但是上面的代码更为精简,因此在算法题目中应用广泛。
2.链表如何进行增删改查
个人觉得需要注意的点:当涉及到头结点删除或者插入时,创建一个虚拟节点
ListNode dummy=new ListNode();
dummy.next=head;
这样写算法的时候应该就不用因为删除头结点或者在头结点前插入时单独讨论啦。
以下是头插法逆置链表的代码(不太熟练,积累一下):
public static ListNode reverse(ListNode head){
ListNode worknode=head.next;
head.next=null;
while(worknode!=null){
ListNode temp=worknode.next;
worknode.next=head.next;
head.next=worknode;
worknode=temp;
}
return head;
}