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

 

给定一个链表,旋转链表,将链表每个节点向右移动 个位置,其中 是非负数。

示例 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

 

posted @ 2019-02-26 13:04  夜雨声入眠  阅读(162)  评论(0编辑  收藏  举报