当前位置:网站首页>leetcode-02(链表题)
leetcode-02(链表题)
2022-07-06 19:34:00 【Fairy要carry】
迭代法:
思路:划分一个局部位置,然后用一个辅助节点和辅助指针,比较大小然后辅助指针去连即可,每连一次位置往后推;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
//辅助迭代法
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode help=new ListNode(-1);
ListNode pre=help;//辅助指针
//遍历
while (l1 != null && l2 != null){
if(l1.val<=l2.val){
//进行连接
pre.next=l1;
pre=pre.next;
l1=l1.next;
}else{
pre.next=l2;
pre=pre.next;
l2=l2.next;
}
}
//对剩下节点直接连
if(l1!=null){
pre.next=l1;
}
if(l2!=null){
pre.next=l2;
}
return help.next;
}
}
递归解法
class Solution {
//递归
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//1.结束条件
if(l1==null){
return l2;
}
if(l2==null){
return l1;
}
//2.递归思路
if(l1.val<=l2.val){
l1.next=mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next=mergeTwoLists(l1,l2.next);
return l2;
}
}
}
递归解法,与上提类似
class Solution {
//递归
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//1.结束条件
if(list1==null){
return list2;
}
if(list2==null){
return list1;
}
//2.递归思路
if(list1.val<=list2.val){
list1.next=mergeTwoLists(list1.next,list2);
return list1;
}else{
list2.next=mergeTwoLists(list1,list2.next);
return list2;
}
}
}
迭代法
注意指针的利用指向head,然后指向前一个结点,慢慢往后推
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode cur=head;
//每次循环进行两两交换
while(cur!=null){
ListNode next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}
快慢指针:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode middleNode(ListNode head) {
int n = 0;
ListNode cur = head;
while (cur != null) {
++n;
cur = cur.next;
}
int k = 0;
cur = head;
while (k < n / 2) {
++k;
cur = cur.next;
}
return cur;
}
}
边栏推荐
- Examples of how to use dates in Oracle
- Common fitting models and application methods of PCL
- How to verify accesstoken in oauth2 protocol
- Redis入门完整教程:复制拓扑
- PSINS中19维组合导航模块sinsgps详解(初始赋值部分)
- Kysl Haikang camera 8247 H9 ISAPI test
- Derivative, partial derivative, directional derivative
- Install redis from zero
- [secretly kill little partner pytorch20 days] - [Day1] - [example of structured data modeling process]
- Unity使用MaskableGraphic画一条带箭头的线
猜你喜欢
实施MES管理系统时,哪些管理点是需要注意的
如何分析粉丝兴趣?
How to analyze fans' interests?
Hash table and full comments
掘金量化:通过history方法获取数据,和新浪财经,雪球同用等比复权因子。不同于同花顺
centerX: 用中国特色社会主义的方式打开centernet
Wireshark installation
数论 --- 快速幂、快速幂求逆元
Analysis of USB network card sending and receiving data
Redis introduction complete tutorial: client case analysis
随机推荐
慧通编程入门课程 - 2A闯关
What are the applications and benefits of MES management system
Redis getting started complete tutorial: replication topology
Andrews - multimedia programming
Huitong programming introductory course - 2A breakthrough
ERROR: Could not find a version that satisfies the requirement xxxxx (from versions: none)解决办法
Five reasons for clothing enterprises to deploy MES management system
从零安装Redis
How to analyze fans' interests?
c语言(字符串)如何把字符串中某个指定的字符删除?
INS/GPS组合导航类型简介
Redis入门完整教程:RDB持久化
Redis入门完整教程:客户端常见异常
Es6中Promise的使用
Redis入门完整教程:复制配置
Niuke programming problem -- double pointer of 101 must be brushed
Introduction to ins/gps integrated navigation type
Fundamentals of process management
Use of promise in ES6
【Socket】①Socket技术概述