题目来源:
leetcode:反转链表元素
这里关于反转链表元素其实本来没有打算写博客,但是为了继续增加对于递归思想的使用,还是义无反顾的敲了下来
一丶迭代
这个是大家都能够想到的,定义三个指针,然后往后移的同时更改next属性的指向。
具体实现如下:
ublic ListNode reverseList(ListNode head) {
ListNode pre = null;//这个指向对前节点的前一个节点
ListNode cur = head;//准备从当前节点开始遍历
while(cur != null){
ListNode point = cur.next;//定义临时指针,指向当前节点下一个节点
cur.next = pre;//翻转链表
pre = cur;//一定要先是前节点前移
cur = point;//然后是当然节点前移动
}
return pre;
}
二丶递归
递归的写法和迭代差不多一样,但是没有使用while循环,而是不断调用自身的这个反转方法。
class Solution {
public ListNode reverseList(ListNode head) {
return reverse(null,head);
}
public ListNode reverse(ListNode pre,ListNode cur){
//首先检测临界条件还有就是空数组的检测
if(null == cur){
return pre;
}
//然后定义临时指针,用作递归的下一次输入
ListNode fac = cur.next;
cur.next = pre;//此时反转元素
return reverse(cur,fac);
}
}