leetcode -- 链表问题汇总
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定1->2->3->4
, 你应该返回2->1->4->3
.
使用递归的方式两两的解决相邻的一对节点
1 # Definition for singly-linked list. 2 # class ListNode(object): 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution(object): 8 def swapPairs(self, head): 9 """ 10 :type head: ListNode 11 :rtype: ListNode 12 """ 13 if not head or not head.next:#当节点数目少于一个时 14 return head 15 cur = head 16 nextnode = head.next#cur和nextnode指针分别指向第一个和第二个节点 17 cur.next = self.swapPairs(nextnode.next)#此处调用自身,做下一对节点的调换 18 nextnode.next = cur 19 return nextnode
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL
1 # Definition for singly-linked list. 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution: 8 def rotateRight(self, head: ListNode, k: int) -> ListNode: 9 if not head: 10 return None 11 q = p = head 12 l = 1 13 while q.next:#计算链表的长度 14 l += 1 15 q = q.next 16 q.next = head#链表的最后指向开头,形成一个循环链表,一个圈 17 k %= l 18 for _ in range(l-k-1): 19 p = p.next 20 ans = p.next 21 p.next = None#断开圆圈 22 return ans