206. Reverse Linked List

内容:Reverse a singly linked list.
A linked list can be reversed either iteratively or recursively. Could you implement both?
LinkedList定义
public class ListNode {
public int val;
public ListNode next;
public ListNode(int x) { val = x; }
 }




总思路图:



递归思路:
递归函数内除了递归调用函数以外,还需要做两件事:1 反转指针的指向; 2 返回新的链表头;


非递归思路

1 使用dummy节点;
2 初始化时,dummy.next指向head;
3 并从第2个节点开始遍历,把遍历过的节点依次插入在dummy节点后;
4 最后,返回dummy.next即可。

public static ListNode reverseListNonRecursive(ListNode head)
{
  // 新建一个dummy
  ListNode dummy = new ListNode(0);

  // dummy指向头部,即dummy再head前面
  dummy.next = head;

  // 边界条件;如果head或者head.next是null,直接返回head;
  if (head == null || head.next == null)
  return head;

  // 从第2个node开始遍历;原因:head.next下一步将需要设置为null
  ListNode curr = head.next;

  //head.next置为null
  head.next = null;

  //从2号node开始遍历,实施如下动作:1 curr.next前指; 2 dummy.nexe指向curr; 3 curr后移
  while (curr != null)
  {
  //存储curr的next,为curr后移做准备
  ListNode tmp = curr.next;

  //1 curr.next前指
  curr.next = dummy.next;

  //dummy.nexe指向curr
  dummy.next = curr;

  //3 curr后移
  curr = tmp;
  }
  //返回dummy.next
  return dummy.next;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值