啊 就因为我实现单链表时多一个头结点 差点…平安夜快乐 虽然是明天晚上 不过是我梦开始的时间。
package com.zhang;
public class Solution {
//先构造一个简单的单链表
private class linkNode{
int val;//值域
linkNode next;//下一个节点引用
public linkNode() {
this.next = null;//初始化
}
public linkNode(int val) {
this.val=val;
this.next=null;
}
}
//创造一个链表头结点并返回
public linkNode create(){
linkNode head = new linkNode();//初始化的事情可以放在它的无惨构造
return head;
}
//往链表中添加元素 尾插
public boolean add(int val,linkNode ph){
//找到链表结尾
while (ph.next!=null){
ph=ph.next;
}
//创造新节点 初始化事情可以放在linkNode的有参构造里
linkNode pNew = new linkNode(val);
ph.next = pNew;
return true;
}
private int i=0; //记录方法的调用次数
private linkNode ph; //记录头结点 因为互换从首结点开始
//链表反转 递归实现
public linkNode reverselink(linkNode pf) {
//记录头结点 因为我的链表头结点和首结点不是一个结点
if(this.i==0){this.ph=pf; pf=this.ph.next;}
this.i=2;
//递归实现
if (pf == null || pf.next == null) {//找到最后一个节点
//最后一个节点存入head节点的 next域中返转
ph.next = pf;
return ph;
} ;
//ph 往后移动一位 用pt记录一下
linkNode pt = pf.next;
linkNode ret = reverselink(pt);
//先给自己后面的节点地址域赋值
pf.next.next= pf;
pf.next = null;
return ret;
}
//打印链表
public void showall(linkNode ph){
while (ph.next!=null){
System.out.print(ph.next.val+",");
ph=ph.next;
}
}
public static void main(String[] args) {
Solution s= new Solution();
linkNode l = s.create();
s.add(1,l);
s.add(2,l);
s.add(3,l);
s.add(6,l);
s.add(5,l);
s.add(7,l);
s.showall(l);
System.out.println();
System.out.println("---------");
s.showall(s.reverselink(l));
}
}



