单链表基础练习(一)

单链表基础练习(一)

a.判断给定一链表是不是回文结构,是返回true,否则返回false。
例如:1->2->2->3->4->3->2->2->1,返回true
1->2->3->4->3,返回false
解题思路:
判断一个链表是否是回文,主要看他是不是以中间节点为轴左右对称,所以需要找到它的中间结点将其以后节点反转,用一个引用标记他,将他与起始节点即中心节点之前的节点一一比对,完全相同则就是回文结构,任意一对相对的节点不同,则不是回文结构。有了大致思路,就需要实现三个关键函数(找a.中间节点,b.反转一个链表,c.比对判断回文)
具体代码如下:
a.找寻中间节点
先求链表长度,截取长度的一半,保留当前节点位置返回

public static Node middle(Node head){
        int len=0;
        Node node=head;
        Node cur=head;
        while (node!=null){
            node=node.next;
            len++;
        }
        for (int i=0;i<len/2;i++){
            cur=cur.next;
        }
        if (len%2!=0)
            cur=cur.next;
        return cur;
    }

b.反转一个链表
对于一个不为空的链表,它的头节点为head,定义两个新的引用(a,b)开始置为空,开始一个以head!=null为条件的循环,循环中让其中一个引用a指向head,head向后走一步,新的head指向另一个引用b,引用b又指向引用a指向的对象,直到循环退出,完成链表的反转

Node node=null;
        Node cur=null;
        while (head!=null){
            cur = head;
            head = head.next;
            cur.next = node;
            node = cur;
        }
        return cur;

c.比对判断回文
令一个新的引用指向反转之后的链表头节点,将其指向对象的值与原链表相对的位置比较,完全相同直到这个引用的next值为空,则return ture,否则return false

if (head!=null){
            Node cur=head;
            Node node1=null;
            Node node2=null;
            node1=middle(head);
            node2=fanzhuan(node1);
            Node c1=head;
            Node c2=node2;
            while (c2!=null) {
                while (c1.val == c2.val) {
                    if (c2.next == null)
                        return true;
                    c1 = c1.next;
                    c2 = c2.next;
                }
                return false;
            }
        }
        return false;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值