伪数据java,java-使用伪列表类

我正在做一些家庭作业问题,而我陷入了困境.我很难理解交换列表中数据的最佳方法.

我应该使方法reverse(),它使用LinkedIntList类(如下).这是一个受限的列表类,因此我只能使用其中的内容.

关键是要列出项目清单

[1、2、3、4、5]

并扭转它们

[5,4,3,2,1]

我以为我的伪代码是

获取第一条数据并将其添加到列表中.

循环播放原始大小(因为更改)

并从0取出

然后在末尾的0,1位置添加当前片段.

对于这样的输入:

[1、8、19、4、17]

预期是这样的:

前面-> [17]-> [4]-> [19]-> [8]-> [1] /

我的代码得到这个:

前面-> [19]-> [4]-> [17]-> [8]-> [19]-> [1] /

不知道我在做什么错.

public void reverse(){

int x = this.size();

this.add(front.data);

for (int i = 0; i < x; i++){

this.remove(0);

this.add(this.size()-1, front.data);

}

}

// A LinkedIntList object can be used to store a list of integers.

public class LinkedIntList {

private ListNode front; // node holding first value in list (null if empty)

private String name = "front"; // string to print for front of list

// Constructs an empty list.

public LinkedIntList() {

front = null;

}

// Constructs a list containing the given elements.

// For quick initialization via Practice-It test cases.

public LinkedIntList(int... elements) {

this("front", elements);

}

public LinkedIntList(String name, int... elements) {

this.name = name;

if (elements.length > 0) {

front = new ListNode(elements[0]);

ListNode current = front;

for (int i = 1; i < elements.length; i++) {

current.next = new ListNode(elements[i]);

current = current.next;

}

}

}

// Constructs a list containing the given front node.

// For quick initialization via Practice-It ListNode test cases.

private LinkedIntList(String name, ListNode front) {

this.name = name;

this.front = front;

}

// Appends the given value to the end of the list.

public void add(int value) {

if (front == null) {

front = new ListNode(value, front);

} else {

ListNode current = front;

while (current.next != null) {

current = current.next;

}

current.next = new ListNode(value);

}

}

// Inserts the given value at the given index in the list.

// Precondition: 0 <= index <= size

public void add(int index, int value) {

if (index == 0) {

front = new ListNode(value, front);

} else {

ListNode current = front;

for (int i = 0; i < index - 1; i++) {

current = current.next;

}

current.next = new ListNode(value, current.next);

}

}

public boolean equals(Object o) {

if (o instanceof LinkedIntList) {

LinkedIntList other = (LinkedIntList) o;

return toString().equals(other.toString()); // hackish

} else {

return false;

}

}

// Returns the integer at the given index in the list.

// Precondition: 0 <= index < size

public int get(int index) {

ListNode current = front;

for (int i = 0; i < index; i++) {

current = current.next;

}

return current.data;

}

// Removes the value at the given index from the list.

// Precondition: 0 <= index < size

public void remove(int index) {

if (index == 0) {

front = front.next;

} else {

ListNode current = front;

for (int i = 0; i < index - 1; i++) {

current = current.next;

}

current.next = current.next.next;

}

}

// Returns the number of elements in the list.

public int size() {

int count = 0;

ListNode current = front;

while (current != null) {

count++;

current = current.next;

}

return count;

}

// Returns a text representation of the list, giving

// indications as to the nodes and link structure of the list.

// Detects student bugs where the student has inserted a cycle

// into the list.

public String toFormattedString() {

ListNode.clearCycleData();

String result = this.name;

ListNode current = front;

boolean cycle = false;

while (current != null) {

result += " -> [" + current.data + "]";

if (current.cycle) {

result += " (cycle!)";

cycle = true;

break;

}

current = current.__gotoNext();

}

if (!cycle) {

result += " /";

}

return result;

}

// Returns a text representation of the list.

public String toString() {

return toFormattedString();

}

// Returns a shorter, more "java.util.LinkedList"-like text representation of the list.

public String toStringShort() {

ListNode.clearCycleData();

String result = "[";

ListNode current = front;

boolean cycle = false;

while (current != null) {

if (result.length() > 1) {

result += ", ";

}

result += current.data;

if (current.cycle) {

result += " (cycle!)";

cycle = true;

break;

}

current = current.__gotoNext();

}

if (!cycle) {

result += "]";

}

return result;

}

// ListNode is a class for storing a single node of a linked list. This

// node class is for a list of integer values.

// Most of the icky code is related to the task of figuring out

// if the student has accidentally created a cycle by pointing a later part of the list back to an earlier part.

public static class ListNode {

private static final List ALL_NODES = new ArrayList();

public static void clearCycleData() {

for (ListNode node : ALL_NODES) {

node.visited = false;

node.cycle = false;

}

}

public int data; // data stored in this node

public ListNode next; // link to next node in the list

public boolean visited; // has this node been seen yet?

public boolean cycle; // is there a cycle at this node?

// post: constructs a node with data 0 and null link

public ListNode() {

this(0, null);

}

// post: constructs a node with given data and null link

public ListNode(int data) {

this(data, null);

}

// post: constructs a node with given data and given link

public ListNode(int data, ListNode next) {

ALL_NODES.add(this);

this.data = data;

this.next = next;

this.visited = false;

this.cycle = false;

}

public ListNode __gotoNext() {

return __gotoNext(true);

}

public ListNode __gotoNext(boolean checkForCycle) {

if (checkForCycle) {

visited = true;

if (next != null) {

if (next.visited) {

// throw new IllegalStateException("cycle detected in list");

next.cycle = true;

}

next.visited = true;

}

}

return next;

}

}

// YOUR CODE GOES HERE

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值