【LeetCode 力扣 206】反转链表,反转一个单链表。

学习目标:

目标:熟练运用Java数据结构知识


学习内容:

本文内容:使用Java实现:反转链表


题目描述

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

解题思路

  • 方法一:

第一步定义三个链表对象
第一个prevNode 表示当前结点的前一个结点,初始值为null
第二个curNode 表示当前结点,初始值为head头结点
第三个nextNode 表示当前结点的下一个结点

第二步
将当前结点的next 既curNode.next=prevNode 可将当前结点的next指向前一个结点
然后将三个结点依次后移即可

  • 方法二:

遍历原链表,然后将原链表的值一次头插到新链表即可

实现代码

  • 方法一:
class Solution {
    
    
    public ListNode reverseList(ListNode head) {
    
    
     if(head==null){
    
    
     //链表为空
            return head;
        }
        if(head.next==null){
    
    
            //链表只有一个元素
            return head;
        }
    ListNode pre=null;//前一个结点
        ListNode cur=head;//当前结点
        while(cur!=null){
    
    
            ListNode latter=cur.next;//记录当前结点的下一个结点
            cur.next=pre;//将当前结点的指向逆置
            pre=cur;//结点后移
            cur=latter;//结点后移
        }
        return pre;
    }
}
  • 方法二:
 private static Node reverseList(Node head) {
    
    
       ListNode newhead=null;//新链表头结点
       ListNode cur=head;//原链表头结点
       while(cur!=null){
    
    
           ListNode tmp=new ListNode(cur.val);//记录原链表结点
           tmp.next=newhead;//将原链表结点头插到新链表
           newhead=tmp;//重置新链表头结点
           cur=cur.next;
       }
       return newhead;        
        }

猜你喜欢

转载自blog.csdn.net/zhangxxin/article/details/113666997
今日推荐