当前位置: 代码网 > 科技>人工智能>数据分析 > 单链表面试题---移除链表元素和翻转链表

单链表面试题---移除链表元素和翻转链表

2024年08月02日 数据分析 我要评论
分别定义两个指针,分别为cur和prev,让cur=head.next,让prev=head。如下图cur指针是用来确定该节点的数据是否为要删除的数据,如果cur指向的节点的数据为要删除的数据,则我们让prev.next=cur.next,然后再让cur=cur.next。如果cur指向的节点中的数据不是要删除的,则让prev=cur,cur=cur.next。过程图假设11是我们要删除的数据,则观察图,看到cur指向的数据为11,则执行。

1.移除链表元素

题目链接:203. 移除链表元素 - 力扣(leetcode)

解法一:定义两个指针

分别定义两个指针,分别为cur和prev,让cur=head.next,让prev=head。

如下图

cur指针是用来确定该节点的数据是否为要删除的数据,如果cur指向的节点的数据为要删除的数据,则我们让prev.next=cur.next,然后再让cur=cur.next。如果cur指向的节点中的数据不是要删除的,则让prev=cur,cur=cur.next。

过程图

假设11是我们要删除的数据,则观察图,看到cur指向的数据为11,则执行prev.next=cur.next,cur=cur.next

然后发现cur指向的节点中的数据不是要删除的数据,我们同时让prev=cur,cur=cur.next。

持续上面的步骤,一直到cur指向空。

但是以上这种写法,没有解决要删除的节点在头节点的问题,所以我们要将这一情况单独拿出来解决。

public listnode removeelements(listnode head, int val) {
        if(head==null){
            return head;
        }
        listnode cur=head.next;
        listnode prev=head;
        while(cur!=null){
            if(cur.val==val){
                prev.next=cur.next;
                cur=cur.next;
            }else{
                prev=cur;
                cur=cur.next;
            }
        }
        //解决头节点为删除节点的情况
        if(head.val==val){
            head=head.next;
        }
        return head;
    }

解法二:定义一个新链表

我们可以定义一个新链表,然后将不是要删除的节点放到新节点,最后放回newhead.next。 

 

代码实现

public listnode removeelements(listnode head, int val) {
        if(head==null){
            return null;
        }
        listnode newhead=new listnode();
        listnode cur=head;
        listnode cur2=newhead;
        while(cur!=null){
            if(cur.val!=val){
                cur2.next=cur;
                //注意让cur2=cur
                cur2=cur;
            }
            cur=cur.next;
        } 
        cur2.next=null;
        return newhead.next;
    }

2. 翻转链表

翻转一个链表,我们可以定义一个cur=head.next,接着让cur指向的节点进行头插。

 代码实现

public listnode reverselist(listnode head) {
        if(head==null){
            return null;
        }
        listnode cur=head.next;
        //要先将head.next变为空,因为后面head会变
        head.next=null;
        while(cur!=null){
            //记录cur的下一个节点,因为cur.next后面会变
            listnode curn=cur.next;
            cur.next=head;
            head=cur;
            cur=curn;
        }
        return head;
    }

 

 

 

 

 

 

 

 

 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com