描述:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
迭代法代码如下:
/**
* 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 cur, prev=null, next=null;
cur = head;
while(cur!=null){
next = cur.next;
if(next==null){
cur.next = prev;
return cur;
}
cur.next=prev;
prev = cur;
cur = next;
}
return cur;
}
}
另一种迭代法,代码简洁一些,有注释:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null)
return null;
ListNode pre = null;
ListNode cur = head;
ListNode next = null;
while(cur!=null){
//1.保存下一个节点,防止链表断了
next = cur.next;
//2.将当前节点指向前一个节点从而实现局部反转,想象一下,如果没有1步骤,是不是链表断了
cur.next = pre;
//3.将前一个节点向右移动
pre = cur;
//4.将当前节点向右移动
cur = next;
}
return pre;
}
}
网友评论