1.题目:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
2.代码:
非递归:
# 非递归
# res是返回头部,用cur遍历链表,把cur加到链首,并将res指向cur
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur, res = head, None
while cur is not None:
next = cur.next
cur.next = res
res = cur
cur = next
return res
递归:
//递归法: h为反转后的链表头,一直都是不变的。
//链表递归回来就是反向遍历,把自己的next节点的next指向自己就实现了反转
struct ListNode* reverseList(struct ListNode* l) {
if(l==NULL||l->next==NULL) //一般情况有l->next==NULL找到最后一个节点就够了,但还有[]情况。
return l;
struct ListNode* h=reverseList(l->next);
l->next->next=l;
l->next=NULL; //不改的话反转之后尾节点的next指向它上一个,不是NULL;
return h;
}