链表

1、删除链表中的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
现有一个链表–head=[4, 5, 1, 9],它可以表示为:
4 -> 5 -> 1 -> 9

示例:
输入:head = [4, 5, 1, 9], node = 5
输出:[4, 1, 9]

说明

  • 链表至少包含两个节点
  • 链表中所有节点的值都是唯一的
  • 给定的节点为非末尾节点并且一定是链表中的一个有效节点
  • 不要从你的函数中返回任何结果
class Solution:
    def deleteNode(self, node):
    	node.val = node.next.val
    	node.next = node.next.next
2、删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第n个节点,并且返回链表的头节点。

示例:
给定一个链表:1 -> 2 -> 3 -> 4 -> 5 和 n = 2,
当删除了倒数第二个节点后,链表变为 1 -> 2 -> 3 -> 5。

构建双指针p1与p2,p1先走n步,然后一同运动,当p1指向表尾,p2指向的next即是倒数第N个节点,删除即可。

class Solution:
    def removeNthFromEnd(self, head, n):
    	dummy = ListNode(0)
    	dummy.next = head
    	p1 = p2 = dummy
    	for i in range(n):
    	    p1 = p1.next
    	while p1.next:
    	    p1 = p1.next
    	    p2 = p2.next
    	p2.next = p2.next.next
    	return dummy.next
class Solution:
    def removeNthFromEnd(self, head, n):
    	if not head or n<1:
    	    return None
    	fast = head
    	slow = head
    	for i in range(n):
    	    if not fast:
    	    	return None
    	    fast = fast.next
    	if not fast:
    	    return head.next
    	while fast.next:
    	    fast = fast.next
    	    slow = slow.next
    	slow.next = slow.next.next
    	return head
3、删除列表中等于给定值val的所有节点

Given 1->2->3->4->5->3, val = 3, return the list as 1->2->4->5。

class Solution:
    def removeElements(self, head, val):
	if head == None:
	    return head
	dummy = ListNode(0)
	dummy.next = head
	pre = dummy
	while head:
	    if head.val == val:
	    	pre.next = head.next
	    	head = pre
	    pre = head
	    head = head.next
	return dummy.next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值