一、 链表(Linked List)
链表,是线性表的链式存储结构。一个链表中有若干个结点,每个结点都包含数据域和地址域两部分。数据域用于存储元素,地址域用于存储前驱或后继的地址。

单链表: 每个结点只有一个地址域的线性链表;
双链表: 每个结点都有两个地址域,分别指向前驱结点和后继结点。

 

 

二、实战
做链表题有一个很重要的点,就是在一开始不熟悉的时候要勤动手!多画!把过程画出来!

 

206. 反转链表  给你单链表的头节点 
head ,请你反转链表,并返回反转后的链表

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

思路: 这道题目的思路比较简单,就是修改指针的指向。画图就能比较直观的看出来。

 输入:1->2->3->4->5->NULL

 输出:5->4->3->2->1->NULL

 

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur=head
        pre=None
        while cur:
            temp=cur.next # 保存一下 cur的下一个节点,因为接下来要改变cur->next
            cur.next=pre
            pre=cur
            cur=temp
        return pre    

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。