1.给定一个单链表的头结点head,实现一个调整单链表的函数,使得k个结点之 间逆序,如果最后一组不够k个节点,则不调整最后几个结点。要求:如果链 表的长度为N;时间复杂度达到O(N)。 例如: 链表:1->2->3->4->5->6->7->8->nul;k=3。 调整后:3-≥2-≥1-5->5-≥4-≥7->8->nu1l。并用主函数验证
时间: 2023-05-14 20:06:10 浏览: 101
有头结点的单链表表的实现
可以使用以下代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseKGroup(head: ListNode, k: int) -> ListNode:
if not head or k == 1:
return head
dummy = ListNode(0)
dummy.next = head
pre = dummy
cur = head
i = 0
while cur:
i += 1
if i % k == 0:
pre = reverse(pre, cur.next)
cur = pre.next
else:
cur = cur.next
return dummy.next
def reverse(pre: ListNode, nxt: ListNode) -> ListNode:
last = pre.next
cur = last.next
while cur != nxt:
last.next = cur.next
cur.next = pre.next
pre.next = cur
cur = last.next
return last
```
可以使用以下代码验证:
```python
def printList(head: ListNode):
while head:
print(head.val, end='->')
head = head.next
print('null')
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, ListNode(6, ListNode(7, ListNode(8))))))))
k = 3
printList(head)
head = reverseKGroup(head, k)
printList(head)
```
输出结果为:
```
1->2->3->4->5->6->7->8->null
3->2->1->6->5->4->7->8->null
```
这个函数可以将链表中每k个节点进行逆序操作,时间复杂度为O(N)。
阅读全文