反转链表(简单)
题目来源:力扣
解题
迭代法
一开始如下,我们要做的就是把1指向null,保存原先cur的下一个位置t_cur,保证顺序不会乱
把1指向null之后,cur和pre都往后移动。
接着把2指向1
直到整个链表反转,此时cur指向null,返回pre
/**
* 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 pre=null;
ListNode cur=head;
while(cur!=null){
ListNode t_cur=cur.next;
cur.next=pre;
pre=cur;
cur=t_cur;
}
return pre;
}
}
递归法
通过递归到达最后一层,用
head.next.next=head
把null指向5,反转顺序
接着用
head.next=null;
切断5指向null这条路
此时回退到4这个节点,做同样的操作
直到最后一个节点,每次返回的都是这个P
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null || head.next==null) return head;
ListNode p=reverseList(head.next);
head.next.next=head;
head.next=null;
return p;
}
}