(๑'ᴗ')ゞSS笙 2022-05-09 09:25 采纳率: 100%
浏览 37
已结题

Java Linked list里面为什么要先新建一个ListNode list = head?,为什么不能直接用参数?

在做leetcode力扣时候, 遇到一个问题是消除有序list中的重复值,比如head = [1,1,2]则返回[1,2], 如果是head = [1,1,2,3,3]则返回[1,2,3]. 正确的代码如下:

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode list = head;
         
         while(list != null) {
             if (list.next == null) {
                 break;
             }
             if (list.val == list.next.val) {
                 list.next = list.next.next;
             } else {
                 list = list.next;
             }
         }
         
         return head;
    }
}

我的问题是,为什么不能直接采用参数head? ,而是需要新建一个ListNode List来等于head?不是很理解这里,我试了下如果直接用参数head进行代码则结果是错误的,输入[1,1,2]会返回[2] ,比如:

错误代码:

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        
        while(head != null){
            if(head.next == null){
                break;
            }
            if (head.val == head.next.val){
                head.next= head.next.next;
            }else{
                head = head.next;
            }
        }
        return head;
    }
}

  • 写回答

1条回答 默认 最新

  • 於黾 2022-05-09 09:41
    关注

    head是链表的头地址
    list是当前地址
    先让list指向头
    然后list在循环里向后移动,移动到结尾,循环结束
    如果你直接移动head,那么最终return head的时候,外面得到的就不再是头地址,而是尾地址了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 创建了问题 5月9日

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献