//迭代法反转链表
class Solution {
//如果感觉不好理解你可以先假设链表只包含头节点自己一个节点
public ListNode reverseList(ListNode head) {
ListNode pre=null;//指向前一个结点
ListNode cur=head;//指向当前结点
while(cur!=null){//当前节点非空
//修改当前节点的指向
ListNode tempnext = cur.next;//保留当前节点的下一个节点的引用
cur.next=pre;//当前节点的下一个节点指向前一个节点
//迭代节点
pre=cur;//前一个指针指向当前节点
cur=tempnext;//当前节点指向上面保留的tempnext节点
}//跳出循环时说明cur是原链表的尾节点
return pre;//返回原链表的最后一个节点即新链表的第一个节点
}
}
//递归法 不是很好理解,,,
class Solution {
//1->2->3->4
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null) return head;//对尾结点4的处理
ListNode p = reverseList(head.next);//p始终指向的尾节点4
head.next.next =head;//3的指针的指针,2的指针的指针,1的指针的指针
head.next=null;//3的指针,2的指针的指针,1的指针的指针
return p;//始终是4
}
}
LeetCode JAVA 206. 反转链表
最新推荐文章于 2024-05-14 17:02:05 发布