版权声明: https://blog.csdn.net/li_xunhuan/article/details/89846238
反转一个单向链表可以以下面形式给出: 这是一个单向链表:以此为例给出反转过程 0→1→2→3→null 想要最终转化为: 3→2→1→0→null 我们将其写为等价写法: null←0← 1← 2← 3
那具体算法操作过程为: 对于每个节点而言,当前节点指向前面的节点, 并且将当前的前节点和当前节点后移,以此进行迭代算法
第一次进入:
curr指向0 prev指向null 所以使"0"指向prev=null; 然后prev和curr都向后移动一个单位 prev=null; 0(curr)→1→2→3→null
变为:0和1之间实际上使没有指针指向的,链表似乎断开了 null←0(prev) 1(curr)→ 2(nextTemp)→ 3→null 第二次: null←0← 1(prev) 2(curr)→ 3(nextTemp)→null 第三次: null←0← 1← 2(prev) 3(curr)→null 第四次: null←0← 1← 2← 3(prev) null(curr)
最后当前节点指向了null,将其作为迭代的结束标志
最后结果返回新链表头即可:return prev
代码:
class Solution {
public ListNode reverseList(ListNode head) {/**
* 迭代方法
* 1 -> 2 -> 3 -> 4 -> null
* null <- 1 <- 2 <- 3 <- 4
*
* @param head
* @return
*/
ListNode prev = null; //前指针节点
ListNode curr = head; //当前指针节点
//每次循环,都将当前节点指向它前面的节点,然后当前节点和前节点后移
while (curr != null) {
ListNode tempnext=curr.next;
curr.next=prev;
prev=curr;
curr=tempnext;
}
return prev;
}
}