题目链接:翻转一个单链表
整体思路
Step1
Step2
Step3
Step4
此时提交的代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null){//head为null,即链表无节点,返回null
return null;
}
if(head.next == null){//链表只有一个节点
return head;
}
ListNode cur = head.next;//cur指代当前正要翻转的节点
head.next = null;
ListNode curNext = cur.next;//curNext指代当前正要翻转的节点的下一个节点
while(cur != null){
cur.next = head;//节点连接
head = cur;//将head置为已经翻转的部分的第一个节点的位置
cur = curNext;//cur后移一个节点
curNext = cur.next;//curNext后移一个节点
}
}
return head;
}
}
然而,运行报错,报错结果如下图:
错误原因分析:
循环体部分修改后代码如下:
最终整体代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null){
return null;
}
if(head.next == null){
return head;
}
ListNode cur = head.next;
head.next = null;
ListNode curNext = cur.next;
while(cur != null){
cur.next = head;
head = cur;
cur = curNext;
if(cur != null){
curNext = cur.next;
}
}
return head;
}
}
运行结果如下:
补充思考
好了,这道题的写题心得就记录到这里,如有不足后续再完善。