看到题目的第一想法:两个节点的操作作为一个循环体,需要进行的操作依次有:存第二个节点next的地址,第二个节点指向第一个节点的地址,第一个节点指向暂存的地址
看完代码随想录之后的想法:有很多要注意的细节点,程序终止的判断条件,要分奇偶,且要注意书写顺序避免空指针异常;一般遇到出现两两交换or二分等都涉及到/2,因此都要考虑到奇偶要分开思考
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
dummy_head=ListNode(next=head)
current=dummy_head
while current.next and current.next.next:
temp=current.next
temp1=current.next.next.next
current.next=current.next.next
current.next.next=temp
temp.next=temp1
current=current.next.next
return dummy_head.next
看到题目的第一想法:引入虚拟指针,先遍历链表计数得到链表节点的个数,然后再计算出倒数第n个节点是正数第几个结点,再次进行遍历,然后用删除操作
看完代码随想录之后的想法:快慢指针,相对不变,一般出现相对变化或相对不变时往往会用到快慢指针
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
dummy_head=ListNode(0,head)
slow=fast=dummy_head
for i in range(n+1):
fast=fast.next
while fast:
slow=slow.next
fast=fast.next
slow.next=slow.next.next
return dummy_head.next
看到题目的第一想法:循环嵌套,先遍历得到两个链表的大小,大的作为外层循环,小的作为内层循环,外层循环存入next的地址然后和内层遍历进行比较,如果地址一样就return该节点的地址
看完代码随想录之后的想法:尾对齐之后可以在一个循环里同时操作两个而避免的循环嵌套
看到题目的第一想法:虚拟头节点,循环嵌套,出现next指的是相同地址则返回该头节点的地址
看完代码随想录之后的想法: