leetcode206题 题解 翻译 C语言版 Python版

206. Reverse Linked List

Reverse a singly linked list.

click to show more hints.

Hint:

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

206.倒置一个链表

倒置一个单链表

点击显示更多提示

提示:

倒置一个链表要么用迭代要么用递归。你能两种都实现吗?


思路:单链表的倒置其实就是将结点的next值改变,使其原来指向下家忽然变成指向上家,那这一过程中必然会涉及到三个结点:当前结点、下家结点、上家结点。所以简单的想法即是设置三个游走指针,使其三个紧紧挨着,在单链表上游动,不断改变中间那个指针指向的结点的next值,游到最后时链表就倒置了。类似的还可以理解成循环取出原链表的头结点,将其插入到新的空链表头部。

如果不用迭代而用递归的方式解决此问题,分析起来差不多。调用自身函数获得除当前头结点外的倒置后的链表,然后把当前这个头结点插入到倒置后的链表的尾部。此方法耗时较多,下面就给出迭代的程序。


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode *pre, *cur, *post;
    pre = NULL;
    cur = head;
    post = head;
    while (post){
        post = post->next;
        cur->next = pre;
        pre = cur;
        cur = post;
    }
    return pre;
}

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

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        pre, cur, post = None, head, head
        while post:
            post = post.next
            cur.next = pre
            pre = cur
            cur = post
        return pre


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值