**题目描述:**反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
//直接使用三个指针改方向
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next;
curr.next = prev;
prev = curr;
curr = nextTemp;
}
return prev;
}
思考:
但是仔细看题目,return pre,pre明明是一个节点,一个节点就只有一个val,为什么返回的是一串??
说明它一定在toString方法里做了文章!!!
我们仔细看,这里最后返回的是头结点,结果最终出现了一串,说明他一定在toString方法里写了方法,而不是直接Alt+Insert的。
//返回以当前节点为头结点的字符串
@Override
public String toString(){
StringBuilder s=new StringBuilder("");
Node cur=this;
while(cur!=null){
s.append(Integer.toString(cur.val));
s.append("->");
cur=cur.next;
}
s.append("NULL");
return s.toString();
}
求解:
注意:
我们平时在写链表的时候,总会写一个头结点,头结点我们需要给他初始化,即需要给他赋初始值,否则当我们使用head.next时,就会报空指针异常。设置辅助头结点的写法。
//设置辅助头结点
public ListNode reverseList(ListNode head) {
ListNode reNode=new ListNode(0);
ListNode cur=head;
ListNode next=null;
ListNode pre=null;
while(cur!=null){
next=cur.next;
cur.next=reNode.next;
reNode.next=cur;
cur=next;
}
head=reNode.next;
return head;
}