2022-5-14 链表

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode deleteDuplicates(ListNode head) {
13         ListNode point=head;
14         while (point!=null&&point.next!=null){
15             if (point.val==point.next.val){
16                 point.next=point.next.next;
17             }else {
18                 point=point.next;
19             }
20         }
21         return head;
22     }
23 }

思路:指针从头遍历,跳过重复的。

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode reverseBetween(ListNode head, int left, int right) {
13         ListNode left_pre=null,right_next=null,point=head,l=null,r=null;
14         for (int i=0;i<right;i++){
15             if (i==left-1) l=point;
16             if (i==left-2) left_pre=point;
17             if (i==right-1) r=point;
18             point=point.next;
19         }
20         right_next=r.next;
21         if (left_pre==null) {
22             head=reverser(l,r);
23             left_pre=head;
24         }
25         else {
26             left_pre.next=reverser(l,r);
27         }
28         while (left_pre.next!=null){
29             left_pre=left_pre.next;
30         }
31         left_pre.next=right_next;
32         return head;
33     }
34 
35 
36     public ListNode reverser(ListNode left,ListNode right){
37         ListNode pre=null,cur=left,next=left;
38         while (pre!=right){
39             next=cur.next;
40             cur.next=pre;
41             pre=cur;
42             cur=next;
43         }
44         return pre;
45     }
46 }

思路:迭代实现,找到对应的两个节点实现反转后再拼接。需要注意left可能为1的情况。

posted on 2022-05-14 14:41  阿ming  阅读(18)  评论(0编辑  收藏  举报

导航