首先说一下我的刷题计划和过程,B站有关于leetcode的算法视频,我是边看边刷,有的视频上面有一些代码有错,建议大家还是多多自己判断。
法一 邦邦邦~~~~
原始链表:①------>②------>③------>④------>⑤------>null
head
摘下一个元素组成新链表:
②------>③------>④------>⑤------>null(原始)
↑
head(将head后移一位)
①(新)
↑
newhead
摘下两个元素组成新链表:
③------>④------>⑤------>null(原始)
↑
head(将head后移一位)
②------>①(新)
↑
newhead
摘下三个元素组成新链表:
④------>⑤------>null(原始)
↑
head(将head后移一位)
③------>②------>①(新)
↑
newhead
这个方法没有用到递归,简单的说,首先将原先链表的最前端元素(①),摘下,再将摘下此元素后的链表最前端(②)元素摘下,不断的组成新链表,放在新链表的最前面。
/**
* Definition for singly-linked list. */
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode newhead = null;//新链表的头部指向标
while (head!=null){
ListNode next=head.next;//创建一个变量用来存储原始链表的当前第二个元素 也就是移除头部元素之后将会变成头部元素的元素
head.next = newhead;//
newhead = head;
head = next;
}
return newhead;
}
};
法二 邦邦邦~~~~~~~:
- /**
- * Definition for singly-linked list.
- * public class ListNode {
- * int val;
- * ListNode next;
- * ListNode(int x) { val = x; }
- * }
- */
- public class Solution {
- public ListNode reverseList(ListNode head) {
- if(head==null) return null;
- if(head.next==null) return head;
- ListNode p = head.next;
- ListNode n = reverseList(p);
- //实现逆序
- head.next = null;
- p.next = head;
- return n;
- }
- }
浙公网安备 33010602011771号