24. 两两交换链表中的节点
2021/7/2 23:26:32
本文主要是介绍24. 两两交换链表中的节点,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
官方方法1
递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换。
两两交换链表中的节点,原始链表的head变成新的链表的第二个节点,原始链表的第二个节点变成newHead。链表中的其余节点的两两交换swapPairs可以递归地实现,再更新节点之间的指针关系。
public ListNode swapPairs(ListNode head) { if(head==null||head.next==null){ return head; } ListNode newhead=head.next; head.next=swapPairs(newhead.next); newhead.next=head; return newhead; } }
复杂度分析
时间复杂度:O(n),其中 n 是链表的节点数量。需要对每个节点进行更新指针的操作。
空间复杂度:O(n),其中 n是链表的节点数量。空间复杂度主要取决于递归调用的栈空间。
官方方法2
创建哑结点 dummyHead.next = head,temp 表示当前到达的节点,每次需要交换 temp 后面的两个节点。
- temp -> node1 -> node2
- 变成 temp -> node2 -> node1
两两交换链表中的节点之后,新的链表的头节点是 dummyHead.next
public ListNode swapPairs(ListNode head) { ListNode du=new ListNode(0); du.next=head; ListNode temp=du; while(temp.next!=null&&temp.next.next!=null){ ListNode node1=temp.next; ListNode node2=temp.next.next; temp.next=node2; node1.next=node2.next; node2.next=node1; temp=node1; } return du.next; }
这篇关于24. 两两交换链表中的节点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现