美文网首页
Leetcode:206 反转链表

Leetcode:206 反转链表

作者: mztkenan | 来源:发表于2018-10-19 11:02 被阅读10次

迭代方法:从前往后

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode list) {
        ListNode newList=null;
        while(list!=null){
            ListNode temp=new ListNode(list.val);
            temp.next=newList;
            newList=temp;
            if(list.next!=null)list=list.next;
            else break;
        }
        return newList;
    }
}

减少空间复杂度 O(1)不新建节点

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* result=NULL,*tmp=NULL;
        while(head!=NULL){
            tmp=result;
            result=head;
            head=head->next;
            result->next=tmp;
        }
        return result;
    }
};

递归方法:从后往前,注意链表成环,注意边界条件

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head==None:
            return None
        if head.next==None:
            return head
        else:
            newHead=self.reverseList(head.next)
            head.next.next=head
            head.next=None
        return newHead

相关文章

网友评论

      本文标题:Leetcode:206 反转链表

      本文链接:https://www.haomeiwen.com/subject/orlyzftx.html