import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode reverseCows (ListNode head) {
        ListNode prev = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode next = cur.next;
            cur.next = prev;
            prev = cur;
            cur = next;
        }
        return prev;
    }
}

本题知识点分析:

1.链表遍历

2.虚拟头结点

3.数学模拟

本题解题思路分析:

1.prev用于保存前一个结点,cur表示当前节点,next表示下一个节点

2.先让cur.next = prev;因为要翻转,因此当前节点的下一个是前一个结点的地址

3.prev = cur;覆盖地址, cur = next;覆盖地址,其实就是prev和cur分别向后走了一步。

4.最后返回prev

本题使用编程语言: Java