/**
* 头插法
* @param x
*/publicstaticvoidheadinsert(int x){ListNode s =newListNode(x);
s.next = h.next;
h.next = s;}/**
* 尾插法
* @param x
*/publicstaticvoidtailinsert(int x){ListNode s =newListNode(x);ListNode p = h;while(p.next !=null){
p = p.next;}
p.next = s;}
打印链表
/**
* 打印链表
*/publicstaticvoidprint(){ListNode p = h.next;while(p !=null){System.out.println(p.val +" ");
p = p.next;}}
反转链表
/**
* 反转链表
*/publicstaticvoidreverselist(){ListNode nh =newListNode(-1);ListNode p = nh;ListNode q = h.next;while(q !=null){ListNode t = q;
q = q.next;
t.next = p.next;
p.next = t;}
h = nh;}/**
* 将位置s到t的节点反转(从1开始,包括s和t)
* @param s
* @param t
*/publicstaticvoidreverselist(int s,int t){ListNode p = h;ListNode q =null;// 找到p的位置,p始终指向位置s的前驱节点for(int i =0; i < s -1; i ++){
p = p.next;}
q = p.next;for(int i =0; i < t - s; i ++){ListNode f = q.next;
q.next = f.next;
f.next = p.next;
p.next = f;}}
删除节点
/**
* 删除位置是idx的节点(从1开始)
* @param idx
*/publicstaticvoiddelidx(int idx){ListNode p = h;for(int i =0; i < idx -1; i ++){
p = p.next;}
p.next = p.next.next;}