问题描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)
解题思路
有两种方式:
一是迭代,二是递归
如上图所示,创建一个cur指针作为当前需要反转的指针。首先在未反转之前,保存之前的cur.next指针到cur(作为下一个需要反转的指针)。
再将cue.next值设置为pre。
操作多次之后,最后一个cur为原本顺序中的null,pre为链表中的最后一个元素,因此返回pre即可。
Java代码
解法一(迭代):
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null){
return null;
}
ListNode cur = head;
ListNode pre = null;
ListNode tmp = new ListNode();
while(cur!=null){
tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}