指针的概念
在计算机科学中,指针是一个变量,它存储了一个内存地址的值。这个地址指向存储器中的一个数据单元,可以是变量、数组、结构体等。
指针通常用于动态分配内存、传递参数、实现数据结构等方面。使用指针可以使程序更高效地使用内存,避免不必要的数据拷贝,同时也可以实现更加灵活的数据结构。
指针的概念在不同的编程语言中有所不同,但基本概念是相似的。在 C 和 C++ 中,指针是一种重要的数据类型,程序员需要手动管理内存,因此指针使用得当可以提高程序的效率和灵活性,但使用不当也容易引起内存泄漏、悬垂指针等问题。在其他语言中,如 Java、Python 等,指针被隐藏起来,使用更加安全,但也牺牲了一定的灵活性和效率。
链表的概念
表是一种常见的数据结构,它由一个个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表的基本思想是通过指针连接每个节点,将它们串联起来,形成一个序列。
链表的结构相比于数组更加灵活,因为链表的大小可以动态地增加或减少,而数组的大小一旦确定就不能改变。同时,链表的节点可以不连续存储,因此可以更加高效地利用内存。
链表有多种类型,如单向链表、双向链表、循环链表等。单向链表每个节点只有一个指向下一个节点的指针,双向链表每个节点有两个指针,一个指向前一个节点,一个指向后一个节点,循环链表的最后一个节点指向第一个节点,形成一个环。
链表的操作包括插入、删除、遍历等。插入和删除操作可以在常数时间内完成,而数组的插入和删除操作通常需要线性时间,因为数组的元素需要移动。遍历链表可以从头节点开始,一直遍历到链表尾部,依次访问每个节点的数据元素。
链表在算法和数据结构中有着广泛的应用,如排序算法、图形算法、哈希表等。
在算法中,指针的概念常常被应用。比如说二分查找中存储查找范围最左和最右元素的两个变量,就可以理解为左指针和右指针,因为它们起到了“存储数据储存位置”的作用。
在Python中,标准意义上的指针并不存在。不过,Python语言的许多内置函数和功能都使用了指针来编写——比如说列表,实际上是以链表的形式存在的。不过,程序员无法在用Python编写程序的时候直接使用真正意义上的指针。
#节点定义
class ListNode:
def __init__(self, v):
self.val = v
self.next = None
#删除倒数第n个数据
def removeLastNth(head, n):
temp = ListNode(0)
temp.next = head
fast = slow = temp
c = 0
while c < n: #fast先走n步
fast = fast.next
c += 1
while fast.next:
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return temp.next