当前位置:网站首页>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;
}
}
边栏推荐
- Construction of knowledge map of mall commodities
- Kysl Haikang camera 8247 H9 ISAPI test
- Detailed explanation of 19 dimensional integrated navigation module sinsgps in psins (initial assignment part)
- Introduction to ins/gps integrated navigation type
- Cglib agent in agent mode
- 新标杆!智慧化社会治理
- Babbitt | metauniverse daily must read: is IP authorization the way to break the circle of NFT? What are the difficulties? How should holder choose the cooperation platform
- The panel floating with the mouse in unity can adapt to the size of text content
- How to verify accesstoken in oauth2 protocol
- Qt蓝牙:QBluetoothDeviceInfo
猜你喜欢
wireshark安装
Redis introduction complete tutorial: client case analysis
Qt蓝牙:QBluetoothDeviceInfo
用全连接+softmax对图片的feature进行分类
Oauth2协议中如何对accessToken进行校验
Utilisation de la promesse dans es6
Niuke programming problem -- double pointer of 101 must be brushed
MySQL --- 常用函数 - 字符串函数
NuScenes数据集关于Radar数据的统计
Unity custom webgl packaging template
随机推荐
Redis入门完整教程:客户端案例分析
Planning and design of double click hot standby layer 2 network based on ENSP firewall
The annual salary of general test is 15W, and the annual salary of test and development is 30w+. What is the difference between the two?
A complete tutorial for getting started with redis: problem location and optimization
Classify the features of pictures with full connection +softmax
Wireshark installation
Andrews - multimedia programming
QPushButton-》函数精解
S120驱动器基本调试步骤总结
从零安装Redis
wzoi 1~200
IDEA重启后无法创建Servlet文件的解决方案
Fundamentals of process management
Es6中Promise的使用
实施MES管理系统时,哪些管理点是需要注意的
Analysis of USB network card sending and receiving data
Redis Getting started tutoriel complet: positionnement et optimisation des problèmes
Es6中Promise的使用
牛客编程题--必刷101之双指针篇
Code debugging core step memory