7-1单链表的基本操作

题目:
7-1 单链表基本操作
分数 20
作者 朱允刚
单位 吉林大学
请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。

输入格式:
输入第1行为1个正整数n,表示当前单链表长度;第2行为n个空格间隔的整数,为该链表n个元素的数据域值。第3行为1个正整数m,表示对该链表施加的操作数量;接下来m行,每行表示一个操作,为2个或3个整数,格式为0 k d或1 k。0 k d表示在链表第k个结点后插入一个数据域值为d的结点,若k=0则表示表头插入。1 k表示删除链表中第k个结点,此时k不能为0。注:操作序列中若含有不合法的操作(如在长度为5的链表中删除第8个结点、删除第0个结点等),则忽略该操作。n和m不超过100000。

输出格式:
输出为一行整数,表示实施上述m个操作后的链表,每个整数后一个空格。输入数据保证结果链表不空。

输入样例:
5
1 2 3 4 5
5
0 2 8
0 9 6
0 0 7
1 0
1 6

输出样例:
7 1 2 8 3 5

代码如下:
`import java.util.Scanner;

class ListNode {
int val;
ListNode next;

ListNode(int val) {
    this.val = val;
}

}

public class SingleLinkedListOperations {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
ListNode head = new ListNode(0);
ListNode current = head;
for (int i = 0; i < n; i++) {
current.next = new ListNode(scanner.nextInt());
current = current.next;
}

    int m = scanner.nextInt();
    for (int i = 0; i < m; i++) {
        int op = scanner.nextInt();
        int k = scanner.nextInt();
        if (op == 0) {
            int d = scanner.nextInt();
            ListNode newNode = new ListNode(d);
            if (k == 0) {
                newNode.next = head.next;
                head.next = newNode;
            } else {
                ListNode temp = head;
                while (k > 0 && temp.next!= null) {
                    temp = temp.next;
                    k--;
                }
                if (k == 0) {
                    newNode.next = temp.next;
                    temp.next = newNode;
                }
            }
        } else if (op == 1) {
            if (k > 0) {
                ListNode temp = head;
                while (k > 1 && temp.next!= null) {
                    temp = temp.next;
                    k--;
                }
                if (k == 1 && temp.next!= null) {
                    temp.next = temp.next.next;
                }
            }
        }
    }

    ListNode temp = head.next;
    while (temp!= null) {
        System.out.print(temp.val + " ");
        temp = temp.next;
    }
}

}`

posted @ 2024-10-08 22:11  最爱菠萝  阅读(28)  评论(0编辑  收藏  举报