学习目标:
目标:熟练运用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;
}