LeetCode 206. Reverse Linked List

来源:互联网 发布:书生软件7.3 编辑:程序博客网 时间:2024/06/11 08:40

Reverse a singly linked list.

Hint:

A linked list can be reversed either iteratively or recursively. Could you implement both?

分析:单链表翻转问题:迭代和递归两种做法

代码一:递归

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode reverseList(ListNode head) {        //iteratively         if(head == null || head.next == null) return head;        ListNode p = head;//定义p,q两个变量分别指向head和head.next        ListNode q = head.next;        p.next = null;//头结点变为尾结点,其next为null        ListNode n;//改变指针指向时临时存储数据的变量        while(q != null){            n = q.next;//先将结点q的next指向的结点用临时变量保存            q.next = p;//将q的next指向其之前的结点            p = q;//p,q分别向后移动一位,继续循环翻转,直到q为null            q = n;        }        return p;//返回翻转之后的头结点                    }}

代码二:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode reverseList(ListNode head) {                // recursively        if(head == null || head.next == null) return head;        ListNode p = head;        ListNode q = head.next;//定义两个变量分别指向链表的前两位        ListNode res = reverseList(q);        p.next = null;        q.next = p;                return res;            }}



0 0
原创粉丝点击